From bfdc0b9f497ef10f6687abcc55d93405c611af11 Mon Sep 17 00:00:00 2001 From: XaviDCR92 Date: Thu, 26 Jul 2018 21:15:59 +0200 Subject: [PATCH] * Menu.cpp: actions for CHOICE_SINGLE_PLAYER_GAME have been moved to a new function called MainMenuSinglePlayer(). + BaseUnit.cpp, BaseUnit.h: new _selected flag. + Camera.cpp, Camera.h: linear movement has been taken over quadratic movement. Also, cursor now moves if dealing with screen borders. + Cursor.cpp, Cursor.h: new Cursor class holds cursor X/Y information. It is meant to be contained inside a HumanPlayer object. * Game.cpp: minor changes in casts and comments. + HumanPlayer.cpp: added callbacks for button release events. * HumanPlayer.cpp, HumanPlayerBtn.cpp: button handling has been transferred from HumanPlayer.cpp to HumanPlayerBtn.cpp in order to improve modularity. + Sprite.cpp: sprite data was not being checked against NULL. - Unit.cpp: drawHandler() is now executed by Player object. --- BaseUnit.cpp | 1 + BaseUnit.h | 5 +- Camera.cpp | 165 ++-- Camera.h | 19 +- Cursor.cpp | 126 ++++ Cursor.h | 47 ++ Exe/POCKET.ELF | Bin 31100 -> 32916 bytes Exe/POCKET.HEX | 1744 ++++++++++++++++++++++--------------------- Exe/POCKET.MAP | 938 ++++++++++++----------- Game.cpp | 17 +- HumanPlayer.cpp | 163 ++-- HumanPlayer.h | 32 +- HumanPlayerBtn.cpp | 272 +++++++ Makefile | 5 +- Menu.cpp | 74 +- Player.cpp | 25 + Player.h | 2 + PocketEmpires.geany | 79 +- Sprite.cpp | 49 +- System.h | 2 - Unit.cpp | 2 - Unit.h | 2 +- 22 files changed, 2183 insertions(+), 1586 deletions(-) create mode 100644 Cursor.cpp create mode 100644 Cursor.h create mode 100644 HumanPlayerBtn.cpp diff --git a/BaseUnit.cpp b/BaseUnit.cpp index 7831c16..55ee7de 100644 --- a/BaseUnit.cpp +++ b/BaseUnit.cpp @@ -38,6 +38,7 @@ BaseUnit::BaseUnit(void) : _hp(0), _alive(false), +_selected(false), _x(0), _y(0) { diff --git a/BaseUnit.h b/BaseUnit.h index aa9e16a..a5dfc35 100644 --- a/BaseUnit.h +++ b/BaseUnit.h @@ -31,13 +31,14 @@ class BaseUnit { public: - explicit BaseUnit(); + explicit BaseUnit(void); void handler(void); void create(const uint16_t x, const uint16_t y); protected: uint16_t _hp; /**< Health points. */ - bool _alive; /**< Alive flag. */ + bool _alive; /**< Alive unit flag. */ + bool _selected; /**< Selected unit flag. */ uint16_t _x; /**< X coordinate inside map. */ uint16_t _y; /**< Y coordinate inside map. */ }; diff --git a/Camera.cpp b/Camera.cpp index 6ba6f29..1f75875 100644 --- a/Camera.cpp +++ b/Camera.cpp @@ -3,16 +3,20 @@ * ******************************************************************/ #include "Camera.h" +#include "Cursor.h" #include -#include +#include /* ******************************************************************* * Defines * ******************************************************************/ -#define MAX_CAMERA_SPEED ((int8_t)3) -#define SPEED_CALCULATION_TIME ((uint8_t)3) -#define CAMERA_ACCELERATION ((int8_t)1) +/*****************************************************************//** + * + * \brief This macro defines camera speed, in pixels per frame. + * + *********************************************************************/ +#define CAMERA_SPEED (static_cast(4)) /* ******************************************************************* * Types definition @@ -43,54 +47,10 @@ Camera::Camera(void) : _bLocked(false), _xOffset(0), _yOffset(0), - _xSpeed(0), - _ySpeed(0), _speedTimer(0) { } -void Camera::handler(void) -{ - if (((_xOffset + _xSpeed) >= -16) - || - ((_xOffset + _xSpeed) <= 0) ) - { - _xOffset += _xSpeed; - //~_yOffset += _ySpeed; - } - - if (++_speedTimer >= SPEED_CALCULATION_TIME) - { - _speedTimer = 0; - - if (_ySpeed < 0) - { - _ySpeed += CAMERA_ACCELERATION; - } - else if (_ySpeed > 0) - { - _ySpeed -= CAMERA_ACCELERATION; - } - else - { - /* Y speed is already still. Continue. */ - } - - if (_xSpeed < 0) - { - _xSpeed += CAMERA_ACCELERATION; - } - else if (_xSpeed > 0) - { - _xSpeed -= CAMERA_ACCELERATION; - } - else - { - /* x speed is alreadx still. Continue. */ - } - } -} - /*****************************************************************//** * * \brief This function transforms X coordinates for a given @@ -99,7 +59,7 @@ void Camera::handler(void) *********************************************************************/ uint8_t Camera::getX(const uint8_t x) const { - return x + _xOffset; + return x - _xOffset; } /*****************************************************************//** @@ -110,7 +70,7 @@ uint8_t Camera::getX(const uint8_t x) const *********************************************************************/ uint8_t Camera::getY(const uint8_t y) const { - return y + _yOffset; + return y - _yOffset; } /*****************************************************************//** @@ -119,15 +79,23 @@ uint8_t Camera::getY(const uint8_t y) const * left arrow button. * *********************************************************************/ -void Camera::onLeftBtnPressed(void) +void Camera::onLeftBtnPressed(Cursor& cursor) { - if (_xSpeed < 0) + if (not cursor.isXCentered()) { - _xSpeed += CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(-CAMERA_SPEED); } - else if (_xSpeed < MAX_CAMERA_SPEED) + else if (_xOffset >= CAMERA_SPEED) { - _xSpeed += CAMERA_ACCELERATION; + /* Move camera to the left. */ + _xOffset -= CAMERA_SPEED; + } + else + { + /* Left screen margin reached. + * Cursor has to be moved. */ + cursor.move(-CAMERA_SPEED); } } @@ -137,26 +105,23 @@ void Camera::onLeftBtnPressed(void) * right arrow button. * *********************************************************************/ -void Camera::onRightBtnPressed(void) +void Camera::onRightBtnPressed(Cursor& cursor) { - int8_t acc = 0; - - if (_xSpeed > 0) + if (not cursor.isXCentered()) { - acc = CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(CAMERA_SPEED); } - else if (_xSpeed > -MAX_CAMERA_SPEED) + else if (_xOffset < 512) { - acc = CAMERA_ACCELERATION; - } - - if ((_xOffset + (_xSpeed - acc)) >= -16) - { - _xSpeed -= acc; + /* Move camera to the right. */ + _xOffset += CAMERA_SPEED; } else { - _xSpeed = 0; + /* Right screen margin reached. + * Cursor has to be moved. */ + cursor.move(CAMERA_SPEED); } } @@ -166,15 +131,23 @@ void Camera::onRightBtnPressed(void) * up arrow button. * *********************************************************************/ -void Camera::onUpBtnPressed(void) +void Camera::onUpBtnPressed(Cursor& cursor) { - if (_ySpeed < 0) + if (not cursor.isYCentered()) { - _ySpeed += CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(0, -CAMERA_SPEED); } - else if (_ySpeed < MAX_CAMERA_SPEED) + else if (_yOffset > 0) { - _ySpeed += CAMERA_ACCELERATION; + /* Move camera to the right. */ + _yOffset -= CAMERA_SPEED; + } + else + { + /* Upper screen margin reached. + * Cursor has to be moved. */ + cursor.move(0, -CAMERA_SPEED); } } @@ -184,14 +157,50 @@ void Camera::onUpBtnPressed(void) * down arrow button. * *********************************************************************/ -void Camera::onDownBtnPressed(void) +void Camera::onDownBtnPressed(Cursor& cursor) { - if (_ySpeed > 0) + if (not cursor.isYCentered()) { - _ySpeed -= CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(0, CAMERA_SPEED); } - else if (_ySpeed < MAX_CAMERA_SPEED) + else if (_yOffset < 512) { - _ySpeed -= CAMERA_ACCELERATION; + /* Move camera to the right. */ + _yOffset += CAMERA_SPEED; + } + else + { + /* Lower screen margin reached. + * Cursor has to be moved. */ + cursor.move(0, CAMERA_SPEED); } } + +/*****************************************************************//** + * + * \brief As its name suggests, this function adjusts camera lock. + * + * When camera is locked, it cannot be moved when pressing + * direction keys. + * + * \param bLock + * True if camera must be locked, false otherwise. + * + *********************************************************************/ +void Camera::adjustLock(const bool bLock) +{ + _bLocked = bLock; +} + +/*****************************************************************//** + * + * \brief Returns camera lock state. + * + * \return Returns true if camera is locked, false otherwise. + * + *********************************************************************/ +bool Camera::isLocked(void) const +{ + return _bLocked; +} diff --git a/Camera.h b/Camera.h index d9d02f0..6ff3045 100644 --- a/Camera.h +++ b/Camera.h @@ -5,7 +5,9 @@ * Includes * *************************************/ +#include "Cursor.h" #include +#include /* ************************************* * Defines @@ -23,26 +25,21 @@ class Camera { public: Camera(void); - void handler(void); - void setLock(const bool bLock) - { - _bLocked = bLock; - } + void adjustLock(const bool bLock); + bool isLocked(void) const; uint8_t getX(const uint8_t x) const; uint8_t getY(const uint8_t y) const; /* Event handlers. */ - void onLeftBtnPressed(void); - void onRightBtnPressed(void); - void onUpBtnPressed(void); - void onDownBtnPressed(void); + void onLeftBtnPressed(Cursor& cursor); + void onRightBtnPressed(Cursor& cursor); + void onUpBtnPressed(Cursor& cursor); + void onDownBtnPressed(Cursor& cursor); private: bool _bLocked; int16_t _xOffset; int16_t _yOffset; - int16_t _xSpeed; - int16_t _ySpeed; uint8_t _speedTimer; }; diff --git a/Cursor.cpp b/Cursor.cpp new file mode 100644 index 0000000..2b02ad6 --- /dev/null +++ b/Cursor.cpp @@ -0,0 +1,126 @@ +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include "Cursor.h" +#include + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +#define CURSOR_DEFAULT_X (static_cast(80 >> 1)) +#define CURSOR_DEFAULT_Y (static_cast(44 >> 1)) + +/* ******************************************************************* + * Types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local prototypes declaration + * ******************************************************************/ + +/* ******************************************************************* + * Functions definition + * ******************************************************************/ + +/*****************************************************************//** + * + * \brief Constructor for Cursor class. + * + *********************************************************************/ +Cursor::Cursor(void) : +_x(CURSOR_DEFAULT_X), +_y(CURSOR_DEFAULT_Y) +{ +} + +/*****************************************************************//** + * + * \brief This function moves the cursor to a given position, + * as long as X coordinates are between {0, CURSOR_DEFAULT_X} + * and Y coordinates are between {0, CURSOR_DEFAULT_Y}. + * + * \param x + * X position diff. + * + * \param y + * Y position diff. + * + *********************************************************************/ +void Cursor::move(const int8_t x, const int8_t y) +{ + if ((static_cast(_x) + x >= 0) + && + (static_cast(_x) + x <= CURSOR_DEFAULT_X)) + { + _x += x; + } + + if ((static_cast(_y) + y >= 0) + && + (static_cast(_y) + y <= CURSOR_DEFAULT_Y)) + { + _y += y; + } +} + +/*****************************************************************//** + * + * \brief This function simply returns cursor X position. + * + * \return Returns cursor X position. + * + *********************************************************************/ +uint8_t Cursor::getX(void) +{ + return _x; +} + +/*****************************************************************//** + * + * \brief This function simply returns cursor Y position. + * + * \return Returns cursor Y position. + * + *********************************************************************/ +uint8_t Cursor::getY(void) +{ + return _y; +} + +/*****************************************************************//** + * + * \brief This function returns whether cursor is on its initial + * X position. + * + * \return True if \ref Cursor object is on its initial X position, + * false otherwise. + * + *********************************************************************/ +bool Cursor::isXCentered(void) +{ + return _x == CURSOR_DEFAULT_X; +} + +/*****************************************************************//** + * + * \brief This function returns whether cursor is on its initial + * Y position. + * + * \return True if \ref Cursor object is on its initial Y position, + * false otherwise. + * + *********************************************************************/ +bool Cursor::isYCentered(void) +{ + return _y == CURSOR_DEFAULT_Y; +} diff --git a/Cursor.h b/Cursor.h new file mode 100644 index 0000000..33ba008 --- /dev/null +++ b/Cursor.h @@ -0,0 +1,47 @@ +#ifndef CURSOR_H__ +#define CURSOR_H__ + +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include +#include + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +/* ******************************************************************* + * Global types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables declaration + * ******************************************************************/ + +/* ******************************************************************* + * Global functions declaration + * ******************************************************************/ + +/* ******************************************************************* + * Class definition + * ******************************************************************/ + +class Cursor +{ + public: + explicit Cursor(void); + void move(const int8_t x = 0, const int8_t y = 0); + uint8_t getX(void); + uint8_t getY(void); + bool isXCentered(void); + bool isYCentered(void); + + private: + uint8_t _x; + uint8_t _y; +}; + +#endif /* CURSOR_H__ */ + diff --git a/Exe/POCKET.ELF b/Exe/POCKET.ELF index c453a3ff6c95257bb37336ebfa1de5430303fc31..562636470e7c847b376a61193cd41b8bf38bc1fc 100755 GIT binary patch delta 11660 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 QT*WX6m~HAIuUZWAKSI%4*#H0l delta 10103 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 diff --git a/Exe/POCKET.HEX b/Exe/POCKET.HEX index 723878f..1306a7b 100644 --- a/Exe/POCKET.HEX +++ b/Exe/POCKET.HEX @@ -1,849 +1,897 @@ -:100000000C9406020C942E020C942E020C942E02D8 -:100010000C942E020C942E020C942E020C942E02A0 -:100020000C942E020C942E020C942E020C9472133B -:100030000C942E020C942E020C942E020C942E0280 -:100040000C9490140C942E020C942E020C942E02FC -:100050000C942E020C942E020C942E020C942E0260 -:100060000C942E020C942E02526573756D6500512E -:100070007569740068006F000808003C4299A56625 -:10008000180053696E676C6520706C617965722029 -:1000900067616D65004D756C7469706C617965722E -:1000A0002067616D65004F7074696F6E7300820028 -:1000B0009500A600506F636B657420456D70697282 -:1000C00065730003053F213F1208120A100A0E1C37 -:1000D0000E0C1E0C141A14161F161E131E1E1B1EA9 -:1000E0001E1F1E3F213F3A2F3A173D173F213F1851 -:1000F0001F02040A041F0E04040E1F0A1F0A0E0E1C -:100100001F04110E2E252E2F2A2E262929021F020A -:10011000081F08150E04040E150E15151B151B04DB -:100120000604040C040000000017000300031F0A6B -:100130001F16371A1904130A153A000300000E118E -:10014000110E000A040A040E040030000404040026 -:1001500010001804031F111F121F101D1517111571 -:100160001F07041F17151D1F151D01011F1F151F38 -:1001700017151F000A00003200040A110A0A0A11AA -:100180000A040115020E11171E051E1F150A0E1175 -:100190000A1F110E1F15111F05010E111D1F041F2F -:1001A000111F1108100F1F041B1F10101F061F1E08 -:1001B000040F0E110E1F09060E112E1F051A12151F -:1001C00009011F011F101F0F180F1F0C1F1B041BFD -:1001D000031C03191513001F11030418111F00023B -:1001E00001022020200001020C121E1F120C0C1212 -:1001F000120C121F0C1A14041E05242A1E1F021CA6 -:10020000141D1020201D1F0814111F101E041E1E77 -:10021000021C0C120C3E0A040C123E1E04021416A0 -:100220000A020F120E101E0E100E1E081E120C12C5 -:1002300026281E322A26041E21001F00211E04012A -:1002400002013F213F0A4E6F2053442063617264D4 -:10025000206F720A6E6F204C4F414445522E484524 -:10026000580A0A153A45786974001D20466C617376 -:1002700068696E670A20206C6F616465722E2E2E8D -:100280000A0A444F4E2754205455524E204F46469A -:1002900021000A0A153A49676E6F7265006D560AA9 -:1002A0000A504C45415345205455524E204F464626 -:1002B00020004C4F572042415454455259212000B0 -:1002C000175344001613780016131400151020005D -:1002D00015201000540A03E181867F3E186D830FBC -:1002E0000F0E0183866033186DC3198F1803C38EF8 -:1002F0006033186DE330CF1803C39E603630CDE312 -:1003000060CF3006C79E7E3E30CDB360CF300CC686 -:10031000F6603330D9B660CF33CFCCF66061B0DB56 -:100320001E60CF30D86CE6C061B0DB1E618F1998BB -:100330006CC6C063B19B0E330F0FB078C6FF7E1F33 -:100340001B061E0F05008930080238024978681420 -:100350000000F6E8DBCFC3B8AEA49B928A827B7420 -:100360006E68625C57524E4945413E3A3734312EF1 -:100370002C29272523211F1D1C1A191716151413A4 -:100380001211100F0E0D0C0B0A0908070645006824 -:10039000010000050068013801000005003801680F -:1003A000010000AB03A7030101FF030101F70300F4 -:1003B0000000070002010000030406000000000026 -:1003C000000000010204081020408001020408100F -:1003D000200102040810200404040404040404029C -:1003E00002020202020303030303030000000023CE -:1003F000002600290000000000250028002B000036 -:10040000000000240027002A00007A0211241FBEE9 -:10041000CFEFD8E0DEBFCDBF11E0A0E0B1E0ECE867 -:10042000F4E302C005900D92A835B107D9F723E097 -:10043000A8E5B1E001C01D92A03FB207E1F712E0CC -:10044000C6E0D2E004C02197FE010E94EF18C5303B -:10045000D107C9F70E9430020C94441A0C94000092 -:100460000E9474020E94DB04FDCFEF92FF920F9373 -:100470001F93CF938C018AE3E82EFF24F394C0E00E -:10048000F8018281C81778F4CE9DC001CF9D900DF0 -:10049000112420813181820F931F009711F00E9457 -:1004A0001503CF5FEDCFF801838194810E94C303D0 -:1004B00088E591E00E94750C8823D1F366E082E61E -:1004C00091E00E947F058823D1F242E064E770E06A -:1004D00088E591E00E94300D813089F6CF911F911F -:1004E0000F91FF90EF9008950E94311588E591E0FB -:1004F0000C9476101092A9011092A8018DE491E05D -:100500009093A7018093A6010895089508950F93ED -:100510001F93CF93DF93EC018A010E94710381E462 -:1005200091E099838883FE01E85CFE4F118300838C -:1005300020E130E040E150E061E070E0CE0148961B -:10054000DF91CF911F910F910C945F04BF92CF92D6 -:10055000DF92EF92FF920F931F93CF93DF937C0173 -:1005600005E011E0C1E2D1E0B12C885C9E4F6C0146 -:100570006B2D82E691E00E94A005882309F444C017 -:10058000E881F9818A819B819C0121703327309712 -:1005900019F42115310589F095958795232B51F094 -:1005A000D701A80FB91F2D913C91E20FF31F0190C5 -:1005B000F081E02D8E0D9F1D0995D801ED91FC91E4 -:1005C000119712968D919C9113979C01217033275E -:1005D000309719F421153105B9F095958795232B9E -:1005E00069F0D6012D913C91D901A80FB91F2D9129 -:1005F0003C91E20FF31F0190F081E02DD6012D9187 -:100600003C91820F931F0995B3940C5F1F4F249662 -:10061000B7E0BB12ADCFDF91CF911F910F91FF904B -:10062000EF90DF90CF90BF9008950F931F93CF93DB -:10063000DF93EC010E94A6028E01085E1F4FC85C8A -:10064000DE4FC8010E94D104075F1F4F0C171D0722 -:10065000C1F7DF91CF911F910F9108950F93FC0186 -:1006600071836083428323830483158216820F91F2 -:100670000895FC016583468308951F93CF93DF930C -:10068000EC0140E06B8186EA91E00E948206809155 -:10069000DF019091E001009701F12A81222329F0E6 -:1006A0006D810E94EB03182F01C01D818A81882370 -:1006B00041F06E818091DF019091E0010E94EF0393 -:1006C00001C08E8128813981482F612F86EA91E00F -:1006D000DF91CF911F910C946108DF91CF911F9111 -:1006E0000895AF92BF92CF92DF92EF92FF920F9355 -:1006F0001F93CF93DF93EC016B0187E491E0998323 -:1007000088837E0188E0E80EF11C80E1F7011192F8 -:100710008A95E9F78E01085E1F4F5E01F8ECAF1A6B -:10072000FEEFBF0A60E070E0C8010E945004075F5E -:100730001F4F0A151B05B1F7C114D10431F040E178 -:1007400050E0B601C7010E94351A43E050E06CE268 -:1007500071E0CE010296DF91CF911F910F91FF9032 -:10076000EF90DF90CF90BF90AF900C942E1AFC01C9 -:1007700010821282118214821382168215821086D0 -:10078000178211860895FC0185819681218132812D -:10079000280F391F3283218321852F5F233010F4E6 -:1007A0002187089511862781308537FF03C02F5F89 -:1007B0003F4F05C02115310521F021503109308707 -:1007C000278397FF02C0019603C0009719F0019795 -:1007D000968385830895FC018181860F0895FC012D -:1007E0008381860F0895FC012581368137FF03C080 -:1007F0002E5F3F4F05C02330310524F42F5F3F4F5C -:10080000368325830895FC0125813681121613064F -:100810003CF081E02E3F4FEF34071CF480E001C034 -:1008200082E0281B310981819281820F931F803FD2 -:100830009F4F1CF0368325830895168215820895F4 -:10084000FC012781308537FF03C02E5F3F4F05C075 -:100850002330310524F42F5F3F4F308727830895DD -:10086000FC0127813085121613061CF42250310931 -:1008700002C021503109308727830895FC0111827D -:100880001082128214821382168215820895FC014E -:1008900081E082837483638356834583089508953A -:1008A0000F931F93CF93DF93EC018B010E943E04C3 -:1008B00018870F83DF91CF911F910F910895EF92C9 -:1008C000FF920F931F93CF93DF9300D01F92CDB76A -:1008D000DEB77C018B01BA01A9010E944704F70130 -:1008E000108707838091020190910301A091040178 -:1008F00089839A83AB83FE01E00FF11F818190E031 -:10090000F701918380830F900F900F90DF91CF912B -:100910001F910F91FF90EF900895EF92FF920F9328 -:10092000CF93DF93CDB7DEB72D970FB6F894DEBF28 -:100930000FBECDBFFC0127813085233031052CF55A -:100940007C011986188688E790E09B878A871D8638 -:100950001C86220F331FE1E0F0E0EC0FFD1FE20FD9 -:10096000F31F6781708500E021E041E0CE01019630 -:100970000E942E03F70145816381CE0101960E94FA -:100980003903CE0101960E943D032D960FB6F894CF -:10099000DEBF0FBECDBFDF91CF910F91FF90EF90E3 -:1009A0000895CF93DF93EC010E944F04CE01DF91B5 -:1009B000CF910C948D04EF92FF920F931F93CF93DE -:1009C000DF93CDB7DEB7C355D1400FB6F894DEBF85 -:1009D0000FBECDBF64EB70E088E591E00E94F90F97 -:1009E00043E06EEA70E088E591E00E94300D8111ED -:1009F00032C08E010B5B1E4FC8010E94B7037E01FF -:100A000085ECE81A8EEFF80A8AE0D7011D928A95E4 -:100A1000E9F7B70188E591E00E94D110A801B7017C -:100A2000FE0131967F01CF010E948702FE01E15B4A -:100A3000FE4F85E0DF011D928A95E9F781E0828310 -:100A4000F182E082148303831093E0010093DF01BD -:100A5000CF010E943502CD5ADE4F0FB6F894DEBFAB -:100A60000FBECDBFDF91CF911F910F91FF90EF90FF -:100A70000895FC0188E0808389E0818387E0828398 -:100A800086E0838384E0848382E0858381E18683BA -:100A90000895FF920F931F93CF93DF93EC018C0186 -:100AA000095F1F4FFF24FA9462E088810E941116AB -:100AB00088810E947C162F81892B19F42F5F2F8348 -:100AC00007C0222349F02F3F11F41F8201C0FF828B -:100AD00060E088810E9411162196C017D10721F786 -:100AE000DF91CF911F910F91FF900895FC01E60FC8 -:100AF000F11D81E09781913009F080E00895FC01BB -:100B0000E60FF11D81E097819F3F09F080E0089595 -:100B1000262F30E0FC01E20FF31F423030F49781C2 -:100B2000915081E09E3F58F009C087818F3F31F09E -:100B3000642F0E946F1881E0913009F080E00895E1 -:100B4000860F911DFC0187818F3F09F480E0089595 -:100B50008EBD0DB407FEFDCF8EB50895DC01643562 -:100B600008F057C0403308F054C090969C9190977D -:100B7000E42FE595E595E595262F062E000C330B21 -:100B8000542F57709230A1F4D90184E5E802A00DEA -:100B9000B11D1124AF51BE4F8C9190E0052E02C0C3 -:100BA000959587950A94E2F78095982F91700CC0DF -:100BB000933051F41C968C916427062E000C770B11 -:100BC000682760FF03C014C0911112C084E5E802D9 -:100BD000200D311D1124F901EF51FE4F81E090E00D -:100BE00001C0880F5A95EAF780959081892310C03B -:100BF00084E5E802200D311D1124F901EF51FE4F6B -:100C000081E090E001C0880F5A95EAF79081892B26 -:100C1000808308951F93CF93DF93EC01162FF894F0 -:100C200060E08F850E944D16888918161CF460E0DC -:100C30000E944D16812F0E94A805888918161CF461 -:100C400061E00E944D167894DF91CF911F91089535 -:100C500028EF31E0E1EEF1E0DF01A9011D92415002 -:100C60005040E1F7DC0119961C9219971A961C92D4 -:100C70000895CF92DF92EF92FF920F931F93CF933D -:100C8000DF93EC018C858F5F8C8781EEE82E81E00D -:100C9000F82E10E0612F6064CE010E940A0660E821 -:100CA000CE010E940A0661E08F850E944D16888958 -:100CB00018161CF460E00E944D16670104E5F60169 -:100CC00081916F010E94A8050150C9F78889181603 -:100CD0001CF461E00E944D161F5FF4E5EF0EF11C5D -:100CE0001630C1F660E4CE01DF91CF911F910F91D4 -:100CF000FF90EF90DF90CF900C940A06FC0160A368 -:100D000061A30895FC0160A341A30895EF92FF92AF -:100D10000F931F93CF93DF938C01D62FF42EE22EE7 -:100D2000C0E0CE1544F44F2D4C0F6D2FC8010E942A -:100D3000AE05CF5FF6CFDF91CF911F910F91FF905E -:100D4000EF900895EF92FF920F931F93CF93DF934D -:100D50008C01F62ED42FE22EC0E0CE1544F46F2D78 -:100D60006C0F4D2FC8010E94AE05CF5FF6CFDF910B -:100D7000CF911F910F91FF90EF900895DF92EF9226 -:100D8000FF920F931F93CF93DF937C01D62FD22E28 -:100D9000C42F002E000C110B040F111D47FD1A95D6 -:100DA0008C2F0C2E000C990B8017910744F42D2DDD -:100DB0004C2F6D2FC7010E94A206CF5FF1CFDF91AC -:100DC000CF911F910F91FF90EF90DF9008958F9238 -:100DD0009F92AF92BF92CF92DF92EF92FF920F93CA -:100DE0001F93CF93DF937C01162FD42EC22F81E067 -:100DF000C82EC21AB22EB194BB0CD0E0802F8470E2 -:100E0000A82E802F8270982E802F8870882E0170D7 -:100E1000DC170CF04DC0C7FC04C0C150B394B394B0 -:100E2000CB0CDF5F8D2F880F8F5FC80EAA2071F06B -:100E30004D2D4C0F612F6D0FC7010E94AE054D2D3A -:100E40004D0F6C2F610FC7010E94AE05992071F004 -:100E50004D2D4C1B612F6D0FC7010E94AE054D2D0E -:100E60004D1B6C2F610FC7010E94AE05882071F0E9 -:100E70004D2D4D0F612F6C1BC7010E94AE054D2DEE -:100E80004C0F612F6D1BC7010E94AE05002309F4B2 -:100E9000BFCF4D2D4D1B612F6C1BC7010E94AE05AE -:100EA0004D2D4C1B612F6D1BC7010E94AE05B0CFAD -:100EB000DF91CF911F910F91FF90EF90DF90CF9036 -:100EC000BF90AF909F908F9008958F929F92AF9216 -:100ED000BF92CF92DF92EF92FF920F931F93CF9327 -:100EE000DF936C01A62E942EC22F11E0121BF22E5E -:100EF000F194FF0C83E0B82EBE0CD1E0802F8170FE -:100F0000882EE39402708FEF8D0F8C17BCF517FDC0 -:100F100004C0C150F394F3941F0D8D2F880F8F5F81 -:100F2000180F882091F02C2F220F2E0D492D4C1BCD -:100F30006D2F6A0DC6010E9486062B2D492D4D1B73 -:100F40006C2F6A0DC6010E948606011104C0DF5F86 -:100F5000B394B394D8CF2C2F220F2E0D492D4C1BB8 -:100F60006A2D6D1BC6010E9486062B2D492D4D1B37 -:100F70006A2D6C1BC6010E948606E9CFDF91CF91D6 -:100F80001F910F91FF90EF90DF90CF90BF90AF90A7 -:100F90009F908F9008959F92AF92BF92CF92DF92D1 -:100FA000EF92FF920F931F93CF93DF936C01C62FA5 -:100FB000D42FB22EAE2CAA0C922E9A18FE2CF60E1E -:100FC000292D6F2D0E94A2061FEF100F1D0F292D36 -:100FD000412F6F2DC6010E94A2060A19DE0D202F97 -:100FE0004D2F6C2FC6010E948606CB0D6FEF6C0F44 -:100FF000202F4D2FC6010E94860601E02E2D4D2F79 -:101000006F2DC6010E94E7068E2D8095C80F02E065 -:101010002E2D4D2F6C2FC6010E94E706D12FDE1911 -:1010200004E02E2D4D2F6C2FC6010E94E70608E02C -:101030002E2D4D2F6F2DC6010E94E706DF91CF9117 -:101040001F910F91FF90EF90DF90CF90BF90AF90E6 -:101050009F900895AF92BF92CF92DF92EF92FF924E -:101060000F931F93CF93DF936C01B62EF42E122FA4 -:10107000C02FDE2DEE0CAD2EA60E2E196A2D0E946D -:10108000BE06C150CE19FD0E6FEF6B0D610F6D1BCB -:10109000EC2E01E02D2F4F2DC6010E94650702E0C6 -:1010A0002D2F4F2D6A2DC6010E946507DF91CF912C -:1010B0001F910F91FF90EF90DF90CF90BF90AF9076 -:1010C00008952F923F925F926F927F928F929F929C -:1010D000AF92BF92CF92DF92EF92FF920F931F9346 -:1010E000CF93DF93EC01F901E4903196849164355C -:1010F0000CF019C10E2C000CFF08062F062E000C58 -:10110000110BF701E00FF11F1E161F060CF00BC1AB -:1011100040330CF008C1A82FC42E042E000CDD08AB -:101120005601A80EB11C87FDBA941A141B040CF0CA -:10113000FAC02E5F3F4F570197E0A90EB11CB7FED2 -:1011400004C05701BEE0AB0EB11CB3E0B594A79448 -:10115000BA95E1F747FF0AC0A42FA80FAC9CC001C5 -:10116000AD9C900D1124281B390B40E08A2F0A2ECC -:10117000000C990B840F911D47FD9A95C19714F0AF -:10118000A0E3A41BF8A067FD60E0E535F10514F0CD -:10119000E4E5F0E09E2FCC85C427C62E062E000C79 -:1011A000DD08F601E01BF10B8F014F01F7E08F2204 -:1011B0009924E0E8F0E002C0F595E7958A94E2F71B -:1011C0007E2F17FF02C0095F1F4FF3E015950795AB -:1011D000FA95E1F7200F311F542F577081E001C0BD -:1011E000880F5A95EAF7459545954595F601B4E57A -:1011F0004B02E00DF11D1124AF014F515E4FD0E0C5 -:101200002A2EAA0F3308EE24E394BB24ED2FF0E03E -:10121000E215F3050CF087C0F9015490F1E0FF12DC -:101220001AC0962E8A01E72F6901991608F072C03C -:101230008E2E852021F0D8018C90882A8C92E695FC -:1012400031F4BFEFCB1ADB0AF6015490E0E8939437 -:101250000F5F1F4FEACFF1101CC0782E7094962EAE -:101260008A01E72F6901991608F054C08E2E852057 -:1012700021F0D8018C9087208C92E69531F4BFEF55 -:10128000CB1ADB0AF6015490E0E893940F5F1F4FEE -:10129000EACFF3E0FF1629F0962E8A01E72F6901C5 -:1012A00037C0682E6094862E8A01972E69018916B0 -:1012B000D8F4E92DE52159F0D801EC917C2E782461 -:1012C00070FE02C0E82B02C0E621D801EC93969490 -:1012D00039F4BFEFCB1ADB0AF6015490E0E89E2EFA -:1012E00083940F5F1F4FE3CFCE2514C08E2E852031 -:1012F00021F0D8018C9088268C92E69531F4BFEFCE -:10130000CB1ADB0AF6015490E0E893940F5F1F4F6D -:10131000991660F3880F19F44C5A5F4F81E0DF5F34 -:101320002A0D3B1D73CFDF91CF911F910F91FF903D -:10133000EF90DF90CF90BF90AF909F908F907F9075 -:101340006F905F903F902F900895DC01FB01849196 -:101350008F5F14968C9314973196E491EF5F1596F6 -:10136000EC9315976E5F7F4F5F967C936E935E97BD -:101370000895EF920F93CF93DF93EC014E876D8723 -:101380002F87E98A088B81E0888788A319A28F8339 -:1013900063EC70E0CE010E94A5090E942C1881E048 -:1013A0000E94421885E00E9450188CE00E944B1861 -:1013B00061E08E850E94111661E08D850E941116F4 -:1013C00061E08F850E941116898918161CF461E06E -:1013D0000E941116888918161CF461E00E941116EB -:1013E000898918166CF460E00E944D166AE070E07E -:1013F00080E090E00E940B1561E089890E944D1603 -:101400008D85082E000C990BFC01E952FC4FE491EC -:10141000F0E0EE0FFF1FEB50FC4F259134913D8B18 -:101420002C8BFC01ED53FC4FE491EB8F8E85082E45 -:10143000000C990BFC01E952FC4FE491F0E0EE0F37 -:10144000FF1FEB50FC4F259134913B8B2A8BFC0105 -:10145000ED53FC4FE491EA8F8889082E000C990B1C -:10146000FC01E952FC4FE491F0E0EE0FFF1FEB505E -:10147000FC4F259134913F8B2E8BFC01ED53FC4F9B -:10148000E491EC8F8F85082E000C990BFC01E9523A -:10149000FC4FE491F0E0EE0FFF1FEB50FC4F259165 -:1014A0003491398F288FFC01ED53FC4FE491ED8F7F -:1014B00061E2CE010E940A0664E1CE010E940A06A2 -:1014C0008B8587FF02C08FE78B876B856068CE01B5 -:1014D0000E940A0660E2CE010E940A066CE0CE017C -:1014E0000E940A06CE01DF91CF910F91EF900C94EC -:1014F00039066F927F928F929F92AF92BF92CF9256 -:10150000DF92EF92FF920F931F93CF93DF93EC0143 -:1015100064350CF084C040330CF081C0EC81F0E005 -:1015200031970E9FC0010F9F900D1124860F911DC2 -:1015300067FD9A95181619060CF071C03D81842F2D -:10154000042E000C990B039F800D911D1124181679 -:1015500019060CF064C0D02EB42EC62E88A0A62E7C -:10156000962EE22EF12CEA2DEC190E2E000CFF0B1C -:101570008C8190E0E817F9070CF050C00197E8174C -:10158000F90779F0E89E9001E99E300DF89E300D44 -:101590001124E20FF31F8E8D9F8DE80FF91F149118 -:1015A00001C010E07B2C6B2C272D2B19022E000C78 -:1015B000330B8D8190E0281739076CF510FF11C0AF -:1015C00081E0D81206C0472D6A2DCE010E94AE05DB -:1015D0001EC00D2D2D2D462D692DCE010E94BE065B -:1015E00016C089A198A1891791F088A381E0D8122B -:1015F00006C0472D6A2DCE010E94AE0507C00D2DF5 -:101600002D2D462D692DCE010E94BE0688A216956D -:101610006D0C7394C9CF9D0CA394A5CF88A2DF91C4 -:10162000CF911F910F91FF90EF90DF90CF90BF90DF -:10163000AF909F908F907F906F9008950F93CF936E -:10164000DF93EC016A3011F428851EC06D3019F16A -:10165000262F08854A8569850E94790A28853C815C -:101660008985239F800D112489879F81992399F073 -:10167000082E000C990B44E550E0239F40195109B6 -:101680001124481759073CF49D818A85299F800DB4 -:1016900011248A87198681E090E0DF91CF910F9124 -:1016A00008958F929F92AF92BF92CF92DF92EF9266 -:1016B000FF920F931F93CF93DF93EC015C0186E8B9 -:1016C000A80EB11CD5019C91992309F44DC09C3002 -:1016D00018F41CE0191B01C010E0FE01EA5AFF4F8C -:1016E00081E080836E01BEE4CB0ED11C60E0C601B8 -:1016F0000E947E064E01E3E58E0E911CD4018C9172 -:1017000003E0080F9DE2F92E4F2D481B410F23E007 -:10171000E22E24E560E0C6010E942A0861E0C601CD -:101720000E947E06F401808103E0080F4F2D481BC4 -:10173000410F24E560E0C6010E94CB07FE01E95A93 -:10174000FF4F84E080833196D4018C91181B115D8A -:101750001083CC57DF4F68817981C6010E94E21661 -:10176000F501808181508083DF91CF911F910F918E -:10177000FF90EF90DF90CF90BF90AF909F908F90B1 -:101780000895CF92DF92FF920F931F93CF93DF9331 -:10179000FC01248D358D232B09F49FC0EC018C01B5 -:1017A000025B1F4F40E061E0C8010E948206FE011B -:1017B000E95AFF4FDE01AE5ABF4F9C9185E5891B68 -:1017C000808331961082698D613009F463C028F0FE -:1017D000888D653008F074C06FC0CE0185960E9478 -:1017E000171281E0FE01EA5AFF4F808363EC70E03C -:1017F000C8010E94A5091D8E1C8EFE01EC5AFF4FE8 -:10180000108288EAF82E6E01FAE0CF0ED11CCE01CC -:101810000E94750C8823D9F362EB72E0C8010E9424 -:10182000E2166A8D7B8D4AE050E0C8010E94951750 -:101830006DE972E0C8010E94E2166F2D62956F702B -:1018400070E04AE050E0C8010E94E31762E972E0EC -:10185000C8010E94E21664E0C6010E94760581116B -:101860003CC0FA94F110D3CF60E0CE010E94EA139D -:1018700083B7817F846083BF83B7816083BF83B771 -:10188000816083BF889583B78E7F83BF83B78E7F48 -:1018900083BFBDCFCF58DF4F88819981AA81BB819B -:1018A0008F709927AA27BB270897A105B10510F4C7 -:1018B00067E009C068E707C0882379F06B5F03C061 -:1018C000882359F06FE2C801DF91CF911F910F91EA -:1018D000FF90DF90CF900C940517DF91CF911F916F -:1018E0000F91FF90DF90CF9008958F929F92AF92CB -:1018F000BF92CF92DF92EF92FF920F931F93CF93FD -:10190000DF93EC017C0180E8E80EF11CF701808098 -:101910009180A280B3800E94DA14861A970AA80ADE -:10192000B90A6E01FFE7CF0ED11CF601808190E06D -:10193000A0E0B0E08E0105581F4F88159905AA0553 -:10194000BB0550F4F80180819181A281B381892B7C -:101950008A2B8B2B09F040C0F80180819181A281F4 -:10196000B381892B8A2B8B2BA9F57E01F5E2EF0E33 -:10197000F11CC7010E941412C7010E948012C70106 -:101980000E944513CE010E94510BCE010E94C10B53 -:101990007E018EE4E80EF11CC7010E943906FE01AB -:1019A000EC5AFF4F8081811103C0C7010E942806B5 -:1019B0000E94E614F8016083718382839383FE01A1 -:1019C000EB58FF4FC958DF4F28813981621B730BD9 -:1019D0007183608380E037C00E94DA14F6012081B1 -:1019E000DC01CB01820F911DA11DB11DF701808388 -:1019F0009183A283B383FE01EF58FF4F80819181D1 -:101A0000A281B3810196A11DB11D80839183A28320 -:101A1000B383F80110821182128213820E94E614AD -:101A2000FE01E958FF4F6083718382839383CE0167 -:101A30000E94EE13CE010A960E944905CE014896F7 -:101A40000E94571481E0DF91CF911F910F91FF9079 -:101A5000EF90DF90CF90BF90AF909F908F900895C0 -:101A60002F923F924F925F926F927F928F929F92AE -:101A7000AF92BF92CF92DF92EF92FF920F931F939C -:101A8000CF93DF93CDB7DEB765970FB6F894DEBF7F -:101A90000FBECDBF6C016A8B7B8B4B83FC01EC5A74 -:101AA000FF4F10822FEF2D831C821D8A10E31C8AAA -:101AB0005C013AE0A30EB11C1C0183E5280E311C29 -:101AC000BF972F01242F30E03F832E83C601895A10 -:101AD0009F4F99878887F396FB87EA8796012A5A52 -:101AE0003F4F3F872E870297998B888B3A973F010C -:101AF000C6010E94750C8823D9F364E0C5010E94D9 -:101B00007605012F110F110B811144C065E0C5014D -:101B10000E94760581113EC066E0C5010E947605EF -:101B2000811138C02C8121114CC044E063E0C50113 -:101B30000E948805882331F03C893F5F3C8BC201BD -:101B40000E94C21344E061E0C5010E948805882319 -:101B500031F08C8981508C8BC2010E94C213EC89B8 -:101B60008E2F0E2E000C990B2E813F81821793072A -:101B700031F0E7FF05C03B8131503C8B01C01C8A2E -:101B8000F1018081F4E0F80F2C89829FF019112473 -:101B9000FD8B22C0F101F081F98364E0C5010E9450 -:101BA0007605882309F48CC0C2010E949613FC8933 -:101BB000FD83298121953B81239F302D11243250B3 -:101BC0003D8BC8013D89831B910937FD9395029791 -:101BD0000CF47AC081E08C839D89090F111D97FD5B -:101BE0001A9517FF02C00F5F1F4FF801F595E79593 -:101BF000FA83E9830981102FE885F9851082EA8547 -:101C0000FB85008381E0EE85FF858083E889F98983 -:101C10001082EA88FB88812C912C2C89022E000CE2 -:101C2000330B3D872C878E819F818816990609F199 -:101C3000EC85FD85E815F90579F423E0E885F9855B -:101C40002083F1018081F02F2C89289FF00D112431 -:101C50008F2FEA85FB858083F70165917491C3011D -:101C60000E942017FFEF8F1A9F0A22E0E20EF11C5C -:101C7000DACF60E0C3010E947E06F10180814981D4 -:101C8000FC89F89F400D1124415024E560E0C30118 -:101C90000E94A20661E0C3010E947E06F1018081DC -:101CA00003E0080F4981FC89F89F400D1124425040 -:101CB00083E0E82E24E560E0C3010E94CB0718CF43 -:101CC000C2010E94AC1375CF8D8165960FB6F89452 -:101CD000DEBF0FBECDBFDF91CF911F910F91FF905F -:101CE000EF90DF90CF90BF90AF909F908F907F90BC -:101CF0006F905F904F903F902F9008950F931F9398 -:101D0000CF93DF93EC018C01025B1F4FC8010E944F -:101D100028066AE672E0C8010E94E216C8010E9425 -:101D2000390683E00E94501881E591E0EEEFFFE371 -:101D30000995FE01EC5AFF4F108265E472E0C8017C -:101D40000E942017C8010E9439062A96CE010E94DF -:101D5000490564E0CE010E947605811107C062E367 -:101D600070E080E090E00E940B15F0CFDF91CF9102 -:101D70001F910F9108952F923F924F925F926F9211 -:101D80007F928F929F92AF92BF92CF92DF92EF920B -:101D9000FF920F931F93CF93DF93CDB7DEB72997B1 -:101DA0000FB6F894DEBF0FBECDBF3C0120E7620E38 -:101DB000711CF3012081222309F402C15A011B0185 -:101DC000998788877A9781E08083E885F985EB5A3F -:101DD000FF4F1082E885F985EC5AFF4F1082E885A5 -:101DE000F985108E8F01025B1F4F61E0C8010E94D0 -:101DF0007E06888599858D5A9F4F9D838C83C884E4 -:101E0000D98497E5C90ED11CE884F984E8E5EE0E83 -:101E1000F11C888599858E5A9F4F9A838983E8851E -:101E2000F985EF58FF4FFF83EE8388849984FAE0A9 -:101E30008F0E911C4884598425E2420E511C8885DE -:101E400099850E94750C8823D1F3F1018491882330 -:101E500029F0EC81FD81F081FB8301C01B8224ED20 -:101E600032E040E060E0C8010E946108A114B104C2 -:101E700039F04B81445F950160E0C8010E94610820 -:101E8000F60110822CE0F7012083B101C8010E9405 -:101E9000E216E981FA818081982F990F890F819547 -:101EA0008D5AF6018083EC81FD818081982F990FF6 -:101EB000890F8195835DF7018083EE81FF818081A9 -:101EC00084FF03C060ED72E002C06CEC72E0C801F8 -:101ED0000E942017E981FA818081982F990F890F3C -:101EE00081958D5AF6018083F70180818F5F808311 -:101EF000E885F98582A5882319F068EC72E002C0B4 -:101F000064EC72E0C8010E942017E981FA818081A7 -:101F1000982F990F890F81958D5AF6018083F701CB -:101F200080818F5F808360EC72E0C8010E9420177F -:101F300065E0C4010E947605882351F0E885F985A3 -:101F400062A56F5FC2010E94D813C2010E94C21332 -:101F500064E0C4010E947605811113C0F301208161 -:101F6000422F50E060E070E0EE81FF81808191813E -:101F7000A281B38184179507A607B707A8F02F3F62 -:101F800099F08FEFF3018083088519850B5D1F4F52 -:101F900060E0C8010E94B511C8010E94961381E05B -:101FA000E885F985808F0CC066E0C4010E94760543 -:101FB000882309F444CF888599850E947E0E35CF09 -:101FC00029960FB6F894DEBF0FBECDBFDF91CF913B -:101FD0001F910F91FF90EF90DF90CF90BF90AF9047 -:101FE0009F908F907F906F905F904F903F902F9039 -:101FF000089540E050E00C94BB0EE0E8F7E725912F -:10200000349181E02130304C09F080E00895CF9385 -:10201000DF93EC010E94FD0F9E01275A3F4FDE0126 -:10202000A059BF4F882309F43CC0E6E9F7E7849143 -:10203000F9018083E7E9F7E7E491EC83E8E9F7E762 -:10204000E491ED83E9E9F7E7859194919F838E838D -:10205000EBE9F7E78591949199878887EDE9F7E7B0 -:10206000E491EBA7EEE9F7E7E491EAA7EFE9F7E7F8 -:10207000E491EC93E0EAF7E7859194919D8F8C8F42 -:10208000E2EAF7E7859194919F8F8E8FE4EAF7E774 -:102090008591949199A388A3E6EAF7E785919491B5 -:1020A00020C08CE3F90180831C828FEF8D8320E2B6 -:1020B00033E03F832E8324ED33E03987288791E096 -:1020C0009BA79AA78C938CEA9DE09D8F8C8F8EEDB9 -:1020D0009DE09F8F8E8F84E79EE099A388A38CE379 -:1020E0009FE09BA38AA3DF91CF910895CF92DF92C7 -:1020F000EF920F93CF93DF93EC01FC01E158FF4F78 -:1021000082E38083349781E090E0A0E0B0E08083B8 -:102110009183A283B3833B978FEF8083CE010E948C -:102120000710CE010E94E6136FEFCE010E94EA1362 -:102130006E018AE0C80ED11CC6010E943905C60195 -:102140000E944905CE0148960E944D148EE0E82E6B -:102150000FE020E14BE06DE0CE01825B9F4F0E94DB -:10216000B909A596CE010E94211165E0C6010E9421 -:102170007605882351F060E0CE01DF91CF910F9179 -:10218000EF90DF90CF900C94D81340E064E473E0BC -:10219000CE01DF91CF910F91EF90DF90CF900C9413 -:1021A000C011CF93DF93D62FC72F0E94FD0F882336 -:1021B00059F0AD2FBC2FEBE8F7E784918D93319662 -:1021C000E53987E7F807C9F7DF91CF91089550E027 -:1021D000DA01AA0FBB1FA80FB91F1F963C911F97CA -:1021E00050962C915097E32FF22FE60FF11DE60F3A -:1021F000F11D2591349190963C932E935F97F901B0 -:1022000065917491FC017481769F602D1124DC012D -:10221000A40FB51F91966C939197F90185919491B4 -:10222000E92FF0E0862F90E0E817F90720F4F90194 -:1022300085919491692F769F602D112492966C93CD -:10224000089521E0FC01248324E020A723EA33E061 -:10225000308B278740E060E00E94E71061E070E08B -:1022600083E00E948915E1EBF0E08081887F816046 -:102270008083F89410928000E1E8F0E010821092E0 -:1022800085001092840088E191E09093890080930A -:102290008800808188608083808181608083EFE610 -:1022A000F0E0808182608083789408950F93FC0130 -:1022B000842F01112AC06230D9F050F4662399F0BE -:1022C000613019F540E0682FCF010F910C94E710B1 -:1022D0006330A9F06430C9F46481649F802D1124B7 -:1022E000858F268F12C04B3008F08AE0868B0DC098 -:1022F0006481649F802D1124818F228F06C06481A8 -:10230000649F802D1124838F248F0F910895FC01E9 -:1023100021110EC0648B8481849F402D1124458B34 -:1023200015A214A213A281E0878B8093E503108E7F -:1023300008958091E503882319F08091E20301C09C -:1023400080E08093B4000895FC0161110DC0178AEC -:10235000158A14A213A2108E1092E2031092E303C6 -:102360001092E5030C9499110895CF93DF936111B6 -:1023700004C0EC010E94A4111982DF91CF9108954D -:102380000F931F93CF93DF93411110C08B01EC018A -:1023900060E00E94B5111E870D871B8A1A8A81E0B2 -:1023A000898389E08E8B198E1B8E1D8EDF91CF91D4 -:1023B0001F910F910895CF93DF93DC01611131C01C -:1023C0008C91882371F111968C911197811129C0FC -:1023D00019968C91199717962C91179718969C918E -:1023E0001897E22FF92FE80FF11DE80FF11D259145 -:1023F00034912F3F8FEF380711F41C9212C0ED017A -:102400003C873327220F331FEA85FB85E20FF31F3A -:102410006591749140E0CD010E94C01189858F5F64 -:102420008987DF91CF91089560E00C94DB1160E023 -:102430000C94B5110F93CF93DF93EC0161115CC045 -:102440008981882309F458C08D89811155C02D8553 -:102450003E85EA89FB89EE0FFF1FE20FF31F85918E -:102460009491009701F58989813021F41B8A1A8A99 -:10247000F90110C01982888160E0882371F0CE01D3 -:102480000E94DB11EA89FB89EE0FFF1F8D859E8577 -:10249000E80FF91F8591949106C0CE01DF91CF918D -:1024A0000F910C94A411BC0176956795769567956C -:1024B00080FF17C0AC0186E0569547958A95E1F7F5 -:1024C000292F26952695269520514F716F7000E093 -:1024D000CE010E945611EA89FB893196FB8BEA8B6B -:1024E000D3CF492F6F7320E0CE010E9487118A89D4 -:1024F0009B8901969B8B8A8BDF91CF910F910895D9 -:1025000060E00C941A12CF93DF93EC016111BAC012 -:102510008F89882309F4B6C09D89911105C0CE0129 -:10252000DF91CF910C94A41191509D8B8DA18111BD -:1025300039C02BA13CA12F5F3F4FC901880F991FC4 -:10254000EF8DF8A1E80FF91F65917491862F8770C0 -:102550008EA3AB0163E0569547956A95E1F7CA01F2 -:1025600096958795972F969596959FA38F739C81A7 -:10257000899F802D11248DA341704093E1033CA3DA -:102580002BA389A190E02817390760F02AA1222304 -:1025900029F0821B91099CA38BA304C060E0CE01AB -:1025A0000E94A4118DA181508DA3888D21E0280F58 -:1025B000288F4C893FA1340F8C85380F3A836B8D5F -:1025C000662361F070E0822F022E000C990B0E94AE -:1025D0008F188C8D869F300D11243A838A8190E06C -:1025E000CB966BE370E00E948F188A833E893B8311 -:1025F000698D662371F0062E000C770B822F022E58 -:10260000000C990B0E948F188A8D869F300D112423 -:102610003B836D8D662389F0822F220F990B70E02A -:102620000E948F18CB0162E070E00E948F182E8DFF -:102630009B81289F900D11249B834F3341F08B8108 -:102640008A300CF089E087FD80E08B8301C01B821B -:10265000F894EA81F0E0EE5AFC4FE491E093E40351 -:102660008D8198A5899F802D11249B81899F802D24 -:1026700011249EA1899F802D11248093E3038093D0 -:10268000E2037894DF91CF91089560E00C94831277 -:102690006091E303662329F18091E6038F5F8093C5 -:1026A000E6039091E4038917E0F081E09091E5035F -:1026B000911180E08093E5031092E6038091E1039D -:1026C000882369F08091000193E4899F802D112473 -:1026D000895B809300010E946F189093E2030C9431 -:1026E000991108951F920F920FB60F9211242F93F4 -:1026F0003F934F935F936F937F938F939F93AF938A -:10270000BF93EF93FF930E944813FF91EF91BF9106 -:10271000AF919F918F917F916F915F914F913F9179 -:102720002F910F900FBE0F901F901895CF93DF93AE -:10273000EC0160E00E94B5118BE993E09E878D87E4 -:102740001B8A1A8A81E0898389E08E8B198E1B8E01 -:102750001D8EDF91CF910895CF93DF93EC0160E060 -:102760000E94B51183E993E09E878D871B8A1A8AA0 -:1027700081E0898389E08E8B198E1B8E1D8EDF91FF -:10278000CF910895CF93DF93EC0160E00E94B511E3 -:102790008DE893E09E878D871B8A1A8A81E0898362 -:1027A00089E08E8B198E1B8E1D8EDF91CF9108953F -:1027B000FC01262F660F330B9681692F70E06F5F47 -:1027C0007F4FC9010E948F188583089521E0FC0185 -:1027D0002083089570E085E00C948915AF92BF9234 -:1027E000CF92DF92EF92FF920F931F93CF93DF93DD -:1027F000EC0189819A812FE0289F8001299F100D8B -:10280000112485E10E946C15800F911F24E096959C -:1028100087952A95E1F79A8389832881222391F16C -:10282000EC81AD80B12CC12CD12CA885B9857D015E -:1028300000E010E06E817F819B0140E050E0861750 -:10284000970728F0BC01A817B90708F4BD0180E07C -:1028500090E01F921F921F92EF930E94EA176B83E2 -:102860000F900F900F900F9070E085E0DF91CF9167 -:102870001F910F91FF90EF90DF90CF90BF90AF909E -:102880000C948915DF91CF911F910F91FF90EF90DC -:10289000DF90CF90BF90AF900895FC018CE39FE054 -:1028A0009383828384E0818381E084870895CF933A -:1028B000DF93FC0124813581232B79F1EC018485A0 -:1028C0008F7141F584E10E946C15BC01990F880B52 -:1028D000990B0E94351926EE3FE34EEC50E40E941E -:1028E000C1190E9404199B017B836A83672B81F0C5 -:1028F00084E08983FE01349680E041915191241750 -:10290000350710F4898309C08F5F8430B1F702C0A6 -:102910008FEF89838C858F5F8C87DF91CF910895AE -:102920001F920F920FB60F9211242F933F938F9304 -:102930009F93AF93BF938091E8039091E903A09197 -:10294000EA03B091EB033091E70323E0230F2D3727 -:1029500020F40196A11DB11D05C026E8230F0296A3 -:10296000A11DB11D2093E7038093E8039093E90331 -:10297000A093EA03B093EB038091EC039091ED03F5 -:10298000A091EE03B091EF030196A11DB11D8093BC -:10299000EC039093ED03A093EE03B093EF03BF918C -:1029A000AF919F918F913F912F910F900FBE0F90FC -:1029B0001F9018952FB7F8946091E8037091E90380 -:1029C0008091EA039091EB032FBF08953FB7F894ED -:1029D0008091EC039091ED03A091EE03B091EF0391 -:1029E00026B5A89B05C02F3F19F00196A11DB11D6A -:1029F0003FBFBA2FA92F982F8827820F911DA11DA5 -:102A0000B11DBC01CD0142E0660F771F881F991FE1 -:102A10004A95D1F70895CF92DF92EF92FF92CF932C -:102A2000DF936B017C010E94E614EB01C114D10419 -:102A3000E104F10479F00E94E6146C1B7D0B683E02 -:102A40007340A0F381E0C81AD108E108F108C85129 -:102A5000DC4FECCFDF91CF91FF90EF90DF90CF90E4 -:102A60000895789484B5826084BD84B5816084BD06 -:102A700085B5826085BD85B5816085BDEEE6F0E0F7 -:102A8000808181608083E1E8F0E010828081826053 -:102A90008083808181608083E0E8F0E080818160D4 -:102AA0008083E1EBF0E0808184608083E0EBF0E004 -:102AB000808181608083EAE7F0E0808184608083A8 -:102AC0008081826080838081816080838081806852 -:102AD00080831092C10008958E3008F08E502091AE -:102AE000010190E4299F900111248770822B80932B -:102AF0007C0080917A00806480937A0080917A00D3 -:102B000086FDFCCF809178002091790090E0922B97 -:102B100008951F93CF93DF93182FEB0161E00E947C -:102B20001116209711F460E004C0CF3FD10539F4AD -:102B300061E0812FDF91CF911F910C944D16E12F11 -:102B4000F0E0E155FC4FE491E330F9F048F4E13076 -:102B5000B9F0E230A1F584B5806284BDC8BD34C04F -:102B6000E630E9F0E73019F1E43049F58091800072 -:102B7000806280938000D0938B00C0938A0024C031 -:102B800084B5806884BDC7BD1FC080918000806807 -:102B900080938000D0938900C093880015C08091F5 -:102BA000B00080688093B000C093B3000DC08091E6 -:102BB000B00080628093B000C093B40005C0C038FC -:102BC000D1050CF0B5CFAFCFDF91CF911F91089514 -:102BD000833081F028F4813099F08230A1F008959B -:102BE0008630A9F08730B9F08430D1F4809180002C -:102BF0008F7D03C0809180008F778093800008953F -:102C000084B58F7702C084B58F7D84BD089580918F -:102C1000B0008F7703C08091B0008F7D8093B000AB -:102C20000895CF93DF9390E0FC01ED53FC4F249186 -:102C3000FC01E952FC4F8491882361F190E0880FF8 -:102C4000991FFC01E150FC4FC591D491FC01EB5060 -:102C5000FC4FA591B491611109C09FB7F894888188 -:102C6000209582238883EC912E230BC0623061F47F -:102C70009FB7F8948881322F309583238883EC9115 -:102C80002E2B2C939FBF06C08FB7F894E8812E2B74 -:102C900028838FBFDF91CF9108951F93CF93DF9348 -:102CA000282F30E0F901E155FC4F8491F901ED53F3 -:102CB000FC4FD491F901E952FC4FC491CC23C1F0EF -:102CC000162F81110E94E815EC2FF0E0EE0FFF1F88 -:102CD000EB50FC4FA591B4919FB7F894111104C02B -:102CE0008C91D095D82302C0EC91DE2BDC939FBF52 -:102CF000DF91CF911F910895CF93DF93282F30E07C -:102D0000F901E155FC4F8491F901ED53FC4FD49149 -:102D1000F901E952FC4FC491CC2391F081110E943A -:102D2000E815EC2FF0E0EE0FFF1FE551FC4FA591E9 -:102D3000B491EC91ED2381E090E021F480E002C0B9 -:102D400080E090E0DF91CF910895CF92DF92EF92F3 -:102D5000FF920F931F93CF93DF936C01EB017B01E5 -:102D6000E40EF51E00E010E0CE15DF0561F069917C -:102D7000D601ED91FC910190F081E02DC6010995FD -:102D8000080F191FF1CFC801DF91CF911F910F914B -:102D9000FF90EF90DF90CF9008956115710579F065 -:102DA000FB0101900020E9F73197AF01461B570B5B -:102DB000DC01ED91FC910280F381E02D099480E02B -:102DC00090E00895EF92FF920F931F93CF93DF93BC -:102DD0007C01FB0100E010E06491EF012196662385 -:102DE00061F0D701ED91FC910190F081E02DC701D8 -:102DF0000995080F191FFE01EFCFC801DF91CF9190 -:102E00001F910F91FF90EF900895DC01ED91FC91DF -:102E10000190F081E02D09940F931F93CF93DF93DE -:102E2000EC016DE00E9405178C016AE0CE010E9462 -:102E30000517800F911FDF91CF911F910F9108957A -:102E40000F931F93CF93DF93EC010E94E2168C0146 -:102E5000CE010E940C17800F911FDF91CF911F911F -:102E60000F9108958F929F92AF92BF92CF92DF926F -:102E7000EF92FF920F931F93CF93DF93CDB7DEB7FF -:102E8000A1970FB6F894DEBF0FBECDBF6C01142F13 -:102E9000E52FCB01022F19A2223008F40AE07E01AF -:102EA00021E2E20EF11C802E912CA12CB12C612F7D -:102EB0007E2FA50194010E94A318029F10191124CE -:102EC00081E0E81AF1081A3014F4105D01C0195CB1 -:102ED000F7011083122FE32FCA01232B242B252B5C -:102EE00031F7B701C6010E94CD16A1960FB6F8942E -:102EF000DEBF0FBECDBFDF91CF911F910F91FF902D -:102F0000EF90DF90CF90BF90AF909F908F900895FB -:102F10002115310541F4DC01ED91FC910190F08126 -:102F2000E02D642F09940C9432179A01AB0160E0F4 -:102F300070E00C948817CF92DF92EF92FF920F937C -:102F40001F93CF93DF932115310581F4DC01ED91BF -:102F5000FC910190F081E02D642FDF91CF911F91C2 -:102F60000F91FF90EF90DF90CF9009942A303105B8 -:102F700001F577FF1DC06A017B01EC016DE20E9443 -:102F800005178C0144275527BA014C195D096E09B4 -:102F90007F092AE0CE010E943217800F911FDF9136 -:102FA000CF911F910F91FF90EF90DF90CF900895F8 -:102FB0002AE0DF91CF911F910F91FF90EF90DF906A -:102FC000CF900C9432179A01AB01770F660B770BF9 -:102FD0000C949B174F925F926F927F92AF92BF9229 -:102FE000CF92DF92EF92FF920F931F93CF93DF93D5 -:102FF000CDB7DEB729013A019B01AC01241935098F -:103000004609570989899A89AB89BC89BC01CD01D8 -:103010006A197B098C099D090E945F18A801970114 -:1030200024193509460957090E94C518CA01B90172 -:103030006A0D7B1D8C1D9D1DDF91CF911F910F91FE -:10304000FF90EF90DF90CF90BF90AF907F906F9008 -:103050005F904F900895089561E08AE00E944D16B8 -:1030600061E08AE00E9411168CB580618CBD8CB540 -:1030700080648CBD61E08DE00E94111661E08BE000 -:103080000C941116811103C08CB5806202C08CB5FE -:103090008F7D8CBD08959CB5937F892B8CBD089541 -:1030A0009CB59C7F282F2370922B9CBD2DB582FB55 -:1030B000992790F9822F8E7F892B8DBD0895DB0192 -:1030C0008F939F930E94E418BF91AF91A29F800DB0 -:1030D000911DA39F900DB29F900D11240895991BEF -:1030E00079E004C0991F961708F0961B881F7A95FF -:1030F000C9F780950895AA1BBB1B51E107C0AA1F01 -:10310000BB1FA617B70710F0A61BB70B881F991F88 -:103110005A95A9F780959095BC01CD01089597FB2C -:10312000072E16F4009407D077FD09D00E947B1873 -:1031300007FC05D03EF4909581959F4F08957095BA -:1031400061957F4F0895A1E21A2EAA1BBB1BFD01BA -:103150000DC0AA1FBB1FEE1FFF1FA217B307E40776 -:10316000F50720F0A21BB30BE40BF50B661F771FCE -:10317000881F991F1A9469F76095709580959095AE -:103180009B01AC01BD01CF010895052E97FB1EF4F4 -:1031900000940E94DC1857FD07D00E94A31807FC7A -:1031A00003D04EF40C94DC18509540953095219541 -:1031B0003F4F4F4F5F4F0895909580957095619563 -:1031C0007F4F8F4F9F4F08950E94F518A59F900D38 -:1031D000B49F900DA49F800D911D11240895EE0FB2 -:1031E000FF1F0590F491E02D0994A29FB001B39FB9 -:1031F000C001A39F700D811D1124911DB29F700D00 -:10320000811D1124911D08950E94A01988F09F57D7 -:1032100098F0B92F9927B751B0F0E1F0660F771FFA -:10322000881F991F1AF0BA95C9F714C0B13091F0F0 -:103230000E94BA19B1E008950C94BA19672F782F3B -:103240008827B85F39F0B93FCCF3869577956795B5 -:10325000B395D9F73EF490958095709561957F4F21 -:103260008F4F9F4F0895E89409C097FB3EF49095C7 -:103270008095709561957F4F8F4F9F4F9923A9F04F -:10328000F92F96E9BB279395F695879577956795DE -:10329000B795F111F8CFFAF4BB0F11F460FF1BC022 -:1032A0006F5F7F4F8F4F9F4F16C0882311F096E9B5 -:1032B00011C0772321F09EE8872F762F05C0662363 -:1032C00071F096E8862F70E060E02AF09A95660F1C -:1032D000771F881FDAF7880F9695879597F90895D5 -:1032E00097F99F6780E870E060E008959FEF80ECB9 -:1032F000089500240A94161617061806090608955C -:1033000000240A9412161306140605060895092EC1 -:103310000394000C11F4882352F0BB0F40F4BF2B30 -:1033200011F460FF04C06F5F7F4F8F4F9F4F089570 -:1033300057FD9058440F551F59F05F3F71F0479566 -:10334000880F97FB991F61F09F3F79F0879508954B -:10335000121613061406551FF2CF4695F1DF08C06A -:10336000161617061806991FF1CF86957105610587 -:1033700008940895E894BB2766277727CB0197F92F -:1033800008950E94D4190C9487190E94791938F075 -:103390000E94801920F0952311F00C9470190C9460 -:1033A000761911240C94BB190E94981970F3959FFB -:1033B000C1F3950F50E0551F629FF001729FBB272C -:1033C000F00DB11D639FAA27F00DB11DAA1F649FC8 -:1033D0006627B00DA11D661F829F2227B00DA11D7B -:1033E000621F739FB00DA11D621F839FA00D611D01 -:1033F000221F749F3327A00D611D231F849F600D22 -:10340000211D822F762F6A2F11249F5750409AF04A -:10341000F1F088234AF0EE0FFF1FBB1F661F771FD6 -:10342000881F91505040A9F79E3F510580F00C94A1 -:1034300070190C94BB195F3FE4F3983ED4F3869562 -:1034400077956795B795F795E7959F5FC1F7FE2B41 -:10345000880F911D9695879597F90895DC0101C015 -:103460006D9341505040E0F70895FB01DC0141505D -:10347000504048F001900D920020C9F701C01D9204 -:0C34800041505040E0F70895F894FFCF51 -:10348C000101001923F303000020040000030400D1 -:10349C0000300400000000000000000000000000EC -:1034AC000000000000000000000000000000000010 -:1034BC0000860200008502000000000000000000F1 -:1034CC00008502000000002B18000000001E0BA558 -:0834DC00164C4F41444552001B -:040000030000046095 +:100000000C940B020C9433020C9433020C943302C4 +:100010000C9433020C9433020C9433020C9433028C +:100020000C9433020C9433020C9433020C94E014BD +:100030000C9433020C9433020C9433020C9433026C +:100040000C94FE150C9433020C9433020C9433027E +:100050000C9433020C9433020C9433020C9433024C +:100060000C9433020C943302526573756D65005124 +:100070007569740068006F000808FC848884A2D148 +:100080000A040808003C4299A566180053696E6787 +:100090006C6520706C617965722067616D65004DDB +:1000A000756C7469706C617965722067616D65004B +:1000B0004F7074696F6E73008C009F00B000506FBA +:1000C000636B657420456D70697265730003053F4D +:1000D000213F1208120A100A0E1C0E0C1E0C141AD4 +:1000E00014161F161E131E1E1B1E1E1F1E3F213F11 +:1000F0003A2F3A173D173F213F181F02040A041FE9 +:100100000E04040E1F0A1F0A0E0E1F04110E2E25C8 +:100110002E2F2A2E262929021F02081F08150E0439 +:10012000040E150E15151B151B040604040C040003 +:1001300000000017000300031F0A1F16371A1904D6 +:10014000130A153A000300000E11110E000A040AEA +:10015000040E040030000404040010001804031FFF +:10016000111F121F101D151711151F07041F17153A +:100170001D1F151D01011F1F151F17151F000A0048 +:10018000003200040A110A0A0A110A040115020EBB +:1001900011171E051E1F150A0E110A1F110E1F151D +:1001A000111F05010E111D1F041F111F1108100F33 +:1001B0001F041B1F10101F061F1E040F0E110E1F01 +:1001C00009060E112E1F051A121509011F011F1015 +:1001D0001F0F180F1F0C1F1B041B031C03191513E3 +:1001E000001F11030418111F00020102202020002B +:1001F00001020C121E1F120C0C12120C121F0C1AF0 +:1002000014041E05242A1E1F021C141D1020201D6C +:100210001F0814111F101E041E1E021C0C120C3E7F +:100220000A040C123E1E040214160A020F120E10CB +:100230001E0E100E1E081E120C1226281E322A2612 +:10024000041E21001F00211E040102013F213F0A5C +:100250004E6F2053442063617264206F720A6E6F88 +:10026000204C4F414445522E4845580A0A153A45FC +:10027000786974001D20466C617368696E670A2096 +:10028000206C6F616465722E2E2E0A0A444F4E2731 +:1002900054205455524E204F464621000A0A153A22 +:1002A00049676E6F7265006D560A0A504C4541539E +:1002B00045205455524E204F464620004C4F572063 +:1002C00042415454455259212000175344001613FB +:1002D0007800161314001510200015201000540A81 +:1002E00003E181867F3E186D830F0F0E01838660C8 +:1002F00033186DC3198F1803C38E6033186DE33044 +:10030000CF1803C39E603630CDE360CF3006C79E62 +:100310007E3E30CDB360CF300CC6F6603330D9B6F8 +:1003200060CF33CFCCF66061B0DB1E60CF30D86CCD +:10033000E6C061B0DB1E618F19986CC6C063B19BCB +:100340000E330F0FB078C6FF7E1F1B061E0F050071 +:10035000893008023802497868140000F6E8DBCFDB +:10036000C3B8AEA49B928A827B746E68625C57525B +:100370004E4945413E3A3734312E2C292725232139 +:100380001F1D1C1A1917161514131211100F0E0D1C +:100390000C0B0A0908070645006801000005006803 +:1003A00001380100000500380168010000B503B103 +:1003B000030101FF030101F7030000000700020130 +:1003C0000000030406000000000000000001020419 +:1003D00008102040800102040810200102040810C7 +:1003E00020040404040404040402020202020203BE +:1003F000030303030300000000230026002900007C +:10040000000000250028002B000000000024002729 +:10041000002A00007B0211241FBECFEFD8E0DEBF10 +:10042000CDBF11E0A0E0B1E0E8E6F7E302C005903F +:100430000D92A437B107D9F724E0A4E7B1E001C0D9 +:100440001D92AC30B207E1F712E0CBE0D2E004C07D +:100450002197FE010E945D1ACA30D107C9F70E9498 +:1004600035020C94B21B0C9400000E9475020E948D +:100470004C05FDCFEF92FF920F931F93CF93DF9325 +:100480007C01C0E0D0E000E010E0F701828190E064 +:100490000817190768F4808191818C0F9D1F0097C0 +:1004A00011F00E9401030F5F1F4FC15ADE4FEDCFC5 +:1004B00084E791E00E94E30D8823D1F366E08EE7A4 +:1004C00091E00E94C5068823E1F242E064E770E013 +:1004D00084E791E00E949E0E813099F6DF91CF91E2 +:1004E0001F910F91FF90EF9008950E949F1684E74F +:1004F00091E00C94E4111092C5011092C40189E6B8 +:1005000091E09093C3018093C2010895EF92FF920E +:100510000F931F93CF93DF93CDB7DEB727970FB617 +:10052000F894DEBF0FBECDBF7C010E94B503F7017A +:10053000E35AFE4F80819181019769F461E082EC7A +:1005400091E00E94C40708E024E548E260E082EC04 +:1005500091E00E94040800E022E040E068E770E0DB +:10056000CE0101960E94120386EAE81A8EEFF80A7D +:10057000C7010E948505182FC7010E948205412FDF +:10058000682FCE0101960E945403CE0101960E946D +:100590001D0327960FB6F894DEBF0FBECDBFDF91C7 +:1005A000CF911F910F91FF90EF9008950F931F939C +:1005B000CF93DF93EC018A010E94580389E091E018 +:1005C00099838883FE01E85AFE4F11830083CE0190 +:1005D000865A9E4F0E945E05FE01E45AFE4F10822D +:1005E00031961182108220E130E040E150E061E07C +:1005F00070E0CE014896DF91CF911F910F910C943E +:100600008904CF93DF93EC010E945C06CE010E9427 +:100610009E03E881F9810190F081E02DCE01DF9108 +:10062000CF9109940F93FC017183608342832383EC +:100630000483158216820F9108951F93CF93DF9341 +:10064000EC0140E06B8182EC91E00E94C807809150 +:10065000FB019091FC01009719F12A81222329F0D6 +:100660006D810E94D403182F01C01D818A818823C7 +:1006700041F06E818091FB019091FC010E94D903B1 +:1006800001C08E81288139812115310549F0482F1B +:10069000612F82EC91E0DF91CF911F910C94CF09F3 +:1006A000DF91CF911F910895FC01658346830895E2 +:1006B000AF92BF92CF92DF92EF92FF920F931F9370 +:1006C000CF93DF93EC016B018FE091E099838883F6 +:1006D0007E0188E0E80EF11C80E1F70111928A9515 +:1006E000E9F78E01085E1F4F5E01F8EAAF1AFEEFD0 +:1006F000BF0A60E070E0C8010E947A04065F1F4FE5 +:100700000A151B05B1F7C114D10431F040E150E0E6 +:10071000B601C7010E94A31B43E050E06CE271E008 +:10072000CE010296DF91CF911F910F91FF90EF9034 +:10073000DF90CF90BF90AF900C949C1B0F931F93B2 +:10074000CF93DF938C01085E1F4FEC01C85ADE4F38 +:10075000C8010E94B704065F1F4F0C171D07C1F7A1 +:10076000DF91CF911F910F9108950F931F93CF9316 +:10077000DF938C01085E1F4FEC01C85ADE4FC801A1 +:100780000E94B904065F1F4F0C171D07C1F7DF91C8 +:10079000CF911F910F910895FC0110821282118256 +:1007A0001482138215820895FC018181681B862FB3 +:1007B0000895FC018381681B862F08950F931F9372 +:1007C000CF93DF93EC018B01CB010E94880581114F +:1007D00009C040E06CEFC801DF91CF911F910F91EC +:1007E0000C94640589819A818430910594F304976F +:1007F0009A838983DF91CF911F910F9108950F9371 +:100800001F93CF93DF93EC018B01CB010E948805EE +:10081000811109C040E064E0C801DF91CF911F91D0 +:100820000F910C94640589819A81811522E09207C9 +:100830008CF704969A838983DF91CF911F910F9152 +:1008400008950F931F93CF93DF93EC018B01CB019E +:100850000E948F05811109C04CEF60E0C801DF9153 +:10086000CF911F910F910C9464058B819C81181678 +:10087000190694F704979C838B83DF91CF911F9186 +:100880000F9108950F931F93CF93DF93EC018B018A +:10089000CB010E948F05811109C044E060E0C801CE +:1008A000DF91CF911F910F910C9464058B819C81F6 +:1008B000811522E092078CF704969C838B83DF914D +:1008C000CF911F910F910895FC0180810895FC0143 +:1008D000118210821282138215821482178216826C +:1008E0000895FC0181E08283758364835783468386 +:1008F000089508950F931F93CF93DF93EC018B011D +:100900000E94670419870887DF91CF911F910F918B +:100910000895EF92FF920F931F93CF93DF9300D030 +:100920001F92CDB7DEB77C018B01BA01A9010E94ED +:100930007104F701118700878091020190910301F2 +:10094000A091040189839A83AB83FE01E00FF11F1C +:10095000818190E0F701918380830F900F900F9039 +:10096000DF91CF911F910F91FF90EF9008950C941C +:100970007904EF92FF920F93CF93DF93CDB7DEB759 +:100980002D970FB6F894DEBF0FBECDBFFC012085BA +:100990003185233031052CF57C011986188682E8D3 +:1009A00090E09B878A871D861C86220F331FE1E01B +:1009B000F0E0EC0FFD1FE20FF31F6781708500E090 +:1009C00021E041E0CE0101960E941203F701468129 +:1009D0006481CE0101960E945403CE0101960E94CB +:1009E0001D032D960FB6F894DEBF0FBECDBFDF916D +:1009F000CF910F91FF90EF900895EF92FF920F9398 +:100A00001F93CF93DF93CDB7DEB7C457D1400FB656 +:100A1000F894DEBF0FBECDBF7E0180EAE81A8EEFEC +:100A2000F80A8AE0D7011D928A95E9F7B70184E7B1 +:100A300091E00E943F128E0106591E4FC8010E948C +:100A4000CC03A801B701FE0131967F01CF010E94BE +:100A5000D602FE01E059FE4F85E0DF011D928A9526 +:100A6000E9F781E08283F182E082148303831093AB +:100A7000FC010093FB01CF010E943A02CC58DE4FEB +:100A80000FB6F894DEBF0FBECDBFDF91CF911F919F +:100A90000F91FF90EF9008956EEB70E084E791E086 +:100AA0000E94671143E068EB70E084E791E00E94E8 +:100AB0009E0E811102C00C94FD04089528E2FC01F1 +:100AC000208326E121830895FC019081262F062EA4 +:100AD000000C330B290F311D97FD3A952932310552 +:100AE00010F4960F90838181242F042E000C330B79 +:100AF000280F311D87FD3A952731310510F4840FF9 +:100B000081830895FC0180810895FC01818108950D +:100B1000FC0181E09081983209F080E0089521E0A5 +:100B2000FC018181863109F020E0822F089508952B +:100B3000DC01A35ABE4F2D913C911197FC01E45A60 +:100B4000FE4F2230310539F48081853020F081E07C +:100B500090E08D939C9310820895FC01E35AFE4F20 +:100B6000208131812230310531F4319780818F3FEE +:100B700011F08F5F80830895DB01AA0FBB1FAA0FBE +:100B8000BB1FA75BBE4FED91FC91119712962D9163 +:100B90003C911397A90141705527309719F44115DD +:100BA000510589F035952795452B51F0DC01A20FB1 +:100BB000B31F4D915C91E40FF51F0190F081E02D82 +:100BC000820F931F09940895EF92FF920F931F9342 +:100BD000CF93DF938C01EB017C0188EAE81A8EEF5A +:100BE000F80AD7018D919C910E946404811135C04F +:100BF000DE01AA0FBB1FAA0FBB1FA35DBE4FED9165 +:100C0000FC91119712968D919C9113979C012170E4 +:100C10003327309719F421153105F9F0959587950B +:100C2000232B61F0E701A881B981A80FB91F2D918D +:100C30003C91E20FF31F0190F081E02DB801665A5C +:100C40007E4FD7012D913C91820F931FDF91CF9161 +:100C50001F910F91FF90EF900994DF91CF911F9119 +:100C60000F91FF90EF900895DB01AA0FBB1FAA0F11 +:100C7000BB1FAF5EBE4FED91FC91119712962D9167 +:100C80003C911397A90141705527309719F44115EC +:100C9000510589F035952795452B51F0DC01A20FC0 +:100CA000B31F4D915C91E40FF51F0190F081E02D91 +:100CB000820F931F099408950F931F93CF93DF938F +:100CC0008C01C0E0D0E06C2F8EE791E00E94E60638 +:100CD000BE01882341F0C8010E94BC05BE01C801C5 +:100CE0000E94E40503C0C8010E9434062196C73063 +:100CF000D10549F7DF91CF911F910F910895FC0124 +:100D000088E0808389E0818387E0828386E0838333 +:100D100084E0848382E0858381E186830895FF9265 +:100D20000F931F93CF93DF93EC018C01095F1F4F4B +:100D3000FF24FA9462E088810E947F1788810E94D4 +:100D4000EA172F81892B19F42F5F2F8307C02223E5 +:100D500049F02F3F11F41F8201C0FF8260E08881BB +:100D60000E947F172196C017D10721F7DF91CF91FD +:100D70001F910F91FF900895FC01E60FF11D81E096 +:100D80009781913009F080E00895FC01E60FF11D94 +:100D900081E097819F3F09F080E00895262F30E0A1 +:100DA000FC01E20FF31F423030F49781915081E053 +:100DB0009E3F58F009C087818F3F31F0642F0E9419 +:100DC000DD1981E0913009F080E00895860F911DD2 +:100DD000FC0187818F3F09F480E008958EBD0DB43A +:100DE00007FEFDCF8EB50895DC01643508F057C0CD +:100DF000403308F054C090969C919097E42FE5956D +:100E0000E595E595262F062E000C330B542F5770D1 +:100E10009230A1F4D90184E5E802A00DB11D11249E +:100E2000A350BE4F8C9190E0052E02C095958795FA +:100E30000A94E2F78095982F91700CC0933051F48A +:100E40001C968C916427062E000C770B682760FF98 +:100E500003C014C0911112C084E5E802200D311DB9 +:100E60001124F901E350FE4F81E090E001C0880FAA +:100E70005A95EAF780959081892310C084E5E802AD +:100E8000200D311D1124F901E350FE4F81E090E067 +:100E900001C0880F5A95EAF79081892B80830895C5 +:100EA0001F93CF93DF93EC01162FF89460E08F85AA +:100EB0000E94BB17888918161CF460E00E94BB17BB +:100EC000812F0E94EE06888918161CF461E00E94AA +:100ED000BB177894DF91CF911F91089528EF31E0EF +:100EE000EDEFF1E0DF01A9011D9241505040E1F723 +:100EF000DC0119961C9219971A961C920895CF92AC +:100F0000DF92EF92FF920F931F93CF93DF93EC0149 +:100F10008C858F5F8C878DEFE82E81E0F82E10E0B6 +:100F2000612F6064CE010E94500760E8CE010E94EC +:100F3000500761E08F850E94BB17888918161CF442 +:100F400060E00E94BB17670104E5F60181916F0123 +:100F50000E94EE060150C9F7888918161CF461E05A +:100F60000E94BB171F5FF4E5EF0EF11C1630C1F6AF +:100F700060E4CE01DF91CF911F910F91FF90EF9030 +:100F8000DF90CF900C945007FC0160A361A30895FB +:100F9000FC0160A341A30895EF92FF920F931F936A +:100FA000CF93DF938C01D62FF42EE22EC0E0CE1526 +:100FB00044F44F2D4C0F6D2FC8010E94F406CF5FF3 +:100FC000F6CFDF91CF911F910F91FF90EF90089591 +:100FD000EF92FF920F931F93CF93DF938C01F62E26 +:100FE000D42FE22EC0E0CE1544F46F2D6C0F4D2FA0 +:100FF000C8010E94F406CF5FF6CFDF91CF911F9119 +:101000000F91FF90EF900895EF92FF920F931F932F +:10101000CF93DF937C01C62F142FD22F0E94E807B5 +:101020004FEF400F410F2D2F6C2FC7010E94E80793 +:10103000202F412F6C2FC7010E94CC076FEF6D0F3F +:101040006C0F202F412FC701DF91CF911F910F917E +:10105000FF90EF900C94CC07DF92EF92FF920F93EA +:101060001F93CF93DF937C01D62FD22EC42F002E57 +:10107000000C110B040F111D47FD1A958C2F0C2E1F +:10108000000C990B8017910744F42D2D4C2F6D2FD8 +:10109000C7010E94E807CF5FF1CFDF91CF911F9189 +:1010A0000F91FF90EF90DF9008958F929F92AF92F3 +:1010B000BF92CF92DF92EF92FF920F931F93CF9345 +:1010C000DF937C01162FD42EC22F81E0C82EC21AC6 +:1010D000B22EB194BB0CD0E0802F8470A82E802F4C +:1010E0008270982E802F8870882E0170DC170CF08B +:1010F0004DC0C7FC04C0C150B394B394CB0CDF5FA8 +:101100008D2F880F8F5FC80EAA2071F04D2D4C0FC8 +:10111000612F6D0FC7010E94F4064D2D4D0F6C2FEE +:10112000610FC7010E94F406992071F04D2D4C1BF0 +:10113000612F6D0FC7010E94F4064D2D4D1B6C2FC2 +:10114000610FC7010E94F406882071F04D2D4D0FEC +:10115000612F6C1BC7010E94F4064D2D4C0F612FAF +:101160006D1BC7010E94F406002309F4BFCF4D2D6B +:101170004D1B612F6C1BC7010E94F4064D2D4C1BAB +:10118000612F6D1BC7010E94F406B0CFDF91CF9194 +:101190001F910F91FF90EF90DF90CF90BF90AF9095 +:1011A0009F908F9008958F929F92AF92BF92CF920F +:1011B000DF92EF92FF920F931F93CF93DF936C0117 +:1011C000A62E942EC22F11E0121BF22EF194FF0CCA +:1011D00083E0B82EBE0CD1E0802F8170882EE3947E +:1011E00002708FEF8D0F8C17BCF517FD04C0C15036 +:1011F000F394F3941F0D8D2F880F8F5F180F8820A5 +:1012000091F02C2F220F2E0D492D4C1B6D2F6A0DA6 +:10121000C6010E94CC072B2D492D4D1B6C2F6A0D4A +:10122000C6010E94CC07011104C0DF5FB394B394E0 +:10123000D8CF2C2F220F2E0D492D4C1B6A2D6D1B44 +:10124000C6010E94CC072B2D492D4D1B6A2D6C1B0E +:10125000C6010E94CC07E9CFDF91CF911F910F917A +:10126000FF90EF90DF90CF90BF90AF909F908F90C6 +:1012700008959F92AF92BF92CF92DF92EF92FF922A +:101280000F931F93CF93DF936C01C62FD42FB22EF1 +:10129000AE2CAA0C922E9A18FE2CF60E292D6F2D2C +:1012A0000E94E8071FEF100F1D0F292D412F6F2DF2 +:1012B000C6010E94E8070A19DE0D202F4D2F6C2F62 +:1012C000C6010E94CC07CB0D6FEF6C0F202F4D2F66 +:1012D000C6010E94CC0701E02E2D4D2F6F2DC601B7 +:1012E0000E9455088E2D8095C80F02E02E2D4D2F9F +:1012F0006C2FC6010E945508D12FDE1904E02E2D57 +:101300004D2F6C2FC6010E94550808E02E2D4D2F41 +:101310006F2DC6010E945508DF91CF911F910F914B +:10132000FF90EF90DF90CF90BF90AF909F90089587 +:10133000AF92BF92CF92DF92EF92FF920F931F93E3 +:10134000CF93DF936C01B62EF42E122FC02FDE2D1B +:10135000EE0CAD2EA60E2E196A2D0E942C08C1503F +:10136000CE19FD0E6FEF6B0D610F6D1BEC2E01E0C2 +:101370002D2F4F2DC6010E94D30802E02D2F4F2D97 +:101380006A2DC6010E94D308DF91CF911F910F9162 +:10139000FF90EF90DF90CF90BF90AF9008952F9285 +:1013A0003F925F926F927F928F929F92AF92BF9285 +:1013B000CF92DF92EF92FF920F931F93CF93DF9321 +:1013C000EC01F901E4903196849164350CF019C177 +:1013D0000E2C000CFF08062F062E000C110BF70137 +:1013E000E00FF11F1E161F060CF00BC140330CF06E +:1013F00008C1A82FC42E042E000CDD085601A80E2B +:10140000B11C87FDBA941A141B040CF0FAC02E5FAD +:101410003F4F570197E0A90EB11CB7FE04C057011A +:10142000BEE0AB0EB11CB3E0B594A794BA95E1F75A +:1014300047FF0AC0A42FA80FAC9CC001AD9C900D23 +:101440001124281B390B40E08A2F0A2E000C990B1F +:10145000840F911D47FD9A95C19714F0A0E3A41B3A +:10146000F8A067FD60E0E535F10514F0E4E5F0E093 +:101470009E2FCC85C427C62E062E000CDD08F60153 +:10148000E01BF10B8F014F01F7E08F229924E0E878 +:10149000F0E002C0F595E7958A94E2F77E2F17FFFA +:1014A00002C0095F1F4FF3E015950795FA95E1F724 +:1014B000200F311F542F577081E001C0880F5A95BB +:1014C000EAF7459545954595F601B4E54B02E00DE3 +:1014D000F11D1124AF0143505E4FD0E02A2EAA0F18 +:1014E0003308EE24E394BB24ED2FF0E0E215F3057E +:1014F0000CF087C0F9015490F1E0FF121AC0962E4B +:101500008A01E72F6901991608F072C08E2E852096 +:1015100021F0D8018C90882A8C92E69531F4BFEFA7 +:10152000CB1ADB0AF6015490E0E893940F5F1F4F4B +:10153000EACFF1101CC0782E7094962E8A01E72F06 +:101540006901991608F054C08E2E852021F0D8012B +:101550008C9087208C92E69531F4BFEFCB1ADB0A92 +:10156000F6015490E0E893940F5F1F4FEACFF3E049 +:10157000FF1629F0962E8A01E72F690137C0682EE1 +:101580006094862E8A01972E69018916D8F4E92D78 +:10159000E52159F0D801EC917C2E782470FE02C030 +:1015A000E82B02C0E621D801EC93969439F4BFEF02 +:1015B000CB1ADB0AF6015490E0E89E2E83940F5F6D +:1015C0001F4FE3CFCE2514C08E2E852021F0D801E9 +:1015D0008C9088268C92E69531F4BFEFCB1ADB0A0B +:1015E000F6015490E0E893940F5F1F4F991660F353 +:1015F000880F19F44C5A5F4F81E0DF5F2A0D3B1DC5 +:1016000073CFDF91CF911F910F91FF90EF90DF90FB +:10161000CF90BF90AF909F908F907F906F905F9092 +:101620003F902F900895DC01FB0184918F5F149609 +:101630008C9314973196E491EF5F1596EC93159780 +:101640006E5F7F4F5F967C936E935E970895EF92E7 +:101650000F93CF93DF93EC014E876D872F87E98A35 +:10166000088B81E0888788A319A28F836DEC70E0D6 +:10167000CE010E94130B0E949A1981E00E94B019BA +:1016800085E00E94BE198CE00E94B91961E08E8548 +:101690000E947F1761E08D850E947F1761E08F8532 +:1016A0000E947F17898918161CF461E00E947F1739 +:1016B000888918161CF461E00E947F178989181622 +:1016C0006CF460E00E94BB176AE070E080E090E09C +:1016D0000E94791661E089890E94BB178D85082ECA +:1016E000000C990BFC01EF51FC4FE491F0E0EE0F80 +:1016F000FF1FE150FC4F259134913D8B2C8BFC0159 +:10170000E353FC4FE491EB8F8E85082E000C990B70 +:10171000FC01EF51FC4FE491F0E0EE0FFF1FE150B0 +:10172000FC4F259134913B8B2A8BFC01E353FC4FFA +:10173000E491EA8F8889082E000C990BFC01EF5187 +:10174000FC4FE491F0E0EE0FFF1FE150FC4F2591BC +:1017500034913F8B2E8BFC01E353FC4FE491EC8FD3 +:101760008F85082E000C990BFC01EF51FC4FE49182 +:10177000F0E0EE0FFF1FE150FC4F25913491398FBF +:10178000288FFC01E353FC4FE491ED8F61E2CE0121 +:101790000E94500764E1CE010E9450078B8587FFAD +:1017A00002C08FE78B876B856068CE010E9450076F +:1017B00060E2CE010E9450076CE0CE010E9450070B +:1017C000CE01DF91CF910F91EF900C947F076F9234 +:1017D0007F928F929F92AF92BF92CF92DF92EF92C1 +:1017E000FF920F931F93CF93DF93EC0164350CF0BE +:1017F00084C040330CF081C0EC81F0E031970E9F43 +:10180000C0010F9F900D1124860F911D67FD9A95C1 +:10181000181619060CF071C03D81842F042E000C9F +:10182000990B039F800D911D1124181619060CF0B9 +:1018300064C0D02EB42EC62E88A0A62E962EE22EE0 +:10184000F12CEA2DEC190E2E000CFF0B8C8190E090 +:10185000E817F9070CF050C00197E817F90779F07D +:10186000E89E9001E99E300DF89E300D1124E20FA4 +:10187000F31F8E8D9F8DE80FF91F149101C010E0AA +:101880007B2C6B2C272D2B19022E000C330B8D81FA +:1018900090E0281739076CF510FF11C081E0D812CD +:1018A00006C0472D6A2DCE010E94F4061EC00D2DE4 +:1018B0002D2D462D692DCE010E942C0816C089A120 +:1018C00098A1891791F088A381E0D81206C0472D0E +:1018D0006A2DCE010E94F40607C00D2D2D2D462D38 +:1018E000692DCE010E942C0888A216956D0C739468 +:1018F000C9CF9D0CA394A5CF88A2DF91CF911F9152 +:101900000F91FF90EF90DF90CF90BF90AF909F909E +:101910008F907F906F9008950F93CF93DF93EC019A +:101920006A3011F428851EC06D3019F1262F088504 +:101930004A8569850E94E70B28853C818985239F1C +:10194000800D112489879F81992399F0082E000C1E +:10195000990B44E550E0239F401951091124481781 +:1019600059073CF49D818A85299F800D11248A871F +:10197000198681E090E0DF91CF910F9108958F92C9 +:101980009F92AF92BF92CF92DF92EF92FF920F930E +:101990001F93CF93DF93EC015C0186E8A80EB11C86 +:1019A000D5019C91992309F44DC09C3018F41CE09A +:1019B000191B01C010E0FE01EA5AFF4F81E080834D +:1019C0006E01BEE4CB0ED11C60E0C6010E94C407CC +:1019D0004E01E3E58E0E911CD4018C9103E0080FBB +:1019E0009DE2F92E4F2D481B410F23E0E22E24E506 +:1019F00060E0C6010E94980961E0C6010E94C40728 +:101A0000F401808103E0080F4F2D481B410F24E5AE +:101A100060E0C6010E943909FE01E95AFF4F84E0E7 +:101A200080833196D4018C91181B115D1083CC57A3 +:101A3000DF4F68817981C6010E945018F5018081CD +:101A400081508083DF91CF911F910F91FF90EF9094 +:101A5000DF90CF90BF90AF909F908F900895CF92DE +:101A6000DF92FF920F931F93CF93DF93FC01248D9E +:101A7000358D232B09F49FC0EC018C01025B1F4FB5 +:101A800040E061E0C8010E94C807FE01E95AFF4F2B +:101A9000DE01AE5ABF4F9C9185E5891B808331964C +:101AA0001082698D613009F463C028F0888D65303B +:101AB00008F074C06FC0CE0185960E94851381E046 +:101AC000FE01EA5AFF4F80836DEC70E0C8010E946E +:101AD000130B1D8E1C8EFE01EC5AFF4F108288EAFC +:101AE000F82E6E01FAE0CF0ED11CCE010E94E30D5C +:101AF0008823D9F36CEB72E0C8010E9450186A8DFC +:101B00007B8D4AE050E0C8010E94031967EA72E049 +:101B1000C8010E9450186F2D62956F7070E04AE006 +:101B200050E0C8010E9451196CE972E0C8010E949E +:101B3000501864E0C6010E94BC0681113CC0FA94B2 +:101B4000F110D3CF60E0CE010E94581583B7817F9A +:101B5000846083BF83B7816083BF83B7816083BFA5 +:101B6000889583B78E7F83BF83B78E7F83BFBDCFBA +:101B7000CF58DF4F88819981AA81BB818F709927C7 +:101B8000AA27BB270897A105B10510F467E009C093 +:101B900068E707C0882379F06B5F03C0882359F09A +:101BA0006FE2C801DF91CF911F910F91FF90DF90FD +:101BB000CF900C947318DF91CF911F910F91FF90EC +:101BC000DF90CF9008958F929F92AF92BF92CF9265 +:101BD000DF92EF92FF920F931F93CF93DF93EC016D +:101BE0007C0180E8E80EF11CF70180809180A280E2 +:101BF000B3800E944816861A970AA80AB90A6E018D +:101C0000FFE7CF0ED11CF601808190E0A0E0B0E0AC +:101C10008E0105581F4F88159905AA05BB0550F47C +:101C2000F80180819181A281B381892B8A2B8B2B32 +:101C300009F040C0F80180819181A281B381892B94 +:101C40008A2B8B2BA9F57E01F5E2EF0EF11CC70163 +:101C50000E948213C7010E94EE13C7010E94B314B1 +:101C6000CE010E94BF0CCE010E942F0D7E018EE49A +:101C7000E80EF11CC7010E947F07FE01EC5AFF4FDE +:101C80008081811103C0C7010E946E070E94541613 +:101C9000F8016083718382839383FE01EB58FF4FC9 +:101CA000C958DF4F28813981621B730B71836083B0 +:101CB00080E037C00E944816F6012081DC01CB018C +:101CC000820F911DA11DB11DF70180839183A28315 +:101CD000B383FE01EF58FF4F80819181A281B381D0 +:101CE0000196A11DB11D80839183A283B383F80166 +:101CF00010821182128213820E945416FE01E9584A +:101D0000FF4F6083718382839383CE010E945C15B1 +:101D1000CE010A960E948F06CE0148960E94C515F4 +:101D200081E0DF91CF911F910F91FF90EF90DF90B5 +:101D3000CF90BF90AF909F908F9008952F923F9239 +:101D40004F925F926F927F928F929F92AF92BF92CB +:101D5000CF92DF92EF92FF920F931F93CF93DF9377 +:101D6000CDB7DEB765970FB6F894DEBF0FBECDBF17 +:101D70006C016A8B7B8B4B83FC01EC5AFF4F10820A +:101D80002FEF2D831C821D8A10E31C8A5C013AE030 +:101D9000A30EB11C1C0183E5280E311CBF972F0137 +:101DA000242F30E03F832E83C601895A9F4F9987A5 +:101DB0008887F396FB87EA8796012A5A3F4F3F8729 +:101DC0002E870297998B888B3A973F01C6010E9414 +:101DD000E30D8823D9F364E0C5010E94BC06012FFE +:101DE000110F110B811144C065E0C5010E94BC06B2 +:101DF00081113EC066E0C5010E94BC06811138C059 +:101E00002C8121114CC044E063E0C5010E94CE0644 +:101E1000882331F03C893F5F3C8BC2010E94301522 +:101E200044E061E0C5010E94CE06882331F08C8930 +:101E300081508C8BC2010E943015EC898E2F0E2EA2 +:101E4000000C990B2E813F818217930731F0E7FF39 +:101E500005C03B8131503C8B01C01C8AF10180815F +:101E6000F4E0F80F2C89829FF0191124FD8B22C019 +:101E7000F101F081F98364E0C5010E94BC0688236A +:101E800009F48CC0C2010E940415FC89FD832981DC +:101E900021953B81239F302D112432503D8BC80169 +:101EA0003D89831B910937FD939502970CF47AC005 +:101EB00081E08C839D89090F111D97FD1A9517FFED +:101EC00002C00F5F1F4FF801F595E795FA83E9838C +:101ED0000981102FE885F9851082EA85FB8500834A +:101EE00081E0EE85FF858083E889F9891082EA88A0 +:101EF000FB88812C912C2C89022E000C330B3D8702 +:101F00002C878E819F818816990609F1EC85FD85C5 +:101F1000E815F90579F423E0E885F9852083F101D6 +:101F20008081F02F2C89289FF00D11248F2FEA85B6 +:101F3000FB858083F70165917491C3010E948E181F +:101F4000FFEF8F1A9F0A22E0E20EF11CDACF60E069 +:101F5000C3010E94C407F10180814981FC89F89F77 +:101F6000400D1124415024E560E0C3010E94E807C0 +:101F700061E0C3010E94C407F101808103E0080F02 +:101F80004981FC89F89F400D1124425083E0E82EDE +:101F900024E560E0C3010E94390918CFC2010E9404 +:101FA0001A1575CF8D8165960FB6F894DEBF0FBEFA +:101FB000CDBFDF91CF911F910F91FF90EF90DF90F8 +:101FC000CF90BF90AF909F908F907F906F905F90D9 +:101FD0004F903F902F9008950F931F93CF93DF93CF +:101FE000EC018C01025B1F4FC8010E946E0764E781 +:101FF00072E0C8010E945018C8010E947F0783E068 +:102000000E94BE198DE691E0EEEFFFE30995FE0117 +:10201000EC5AFF4F10826FE472E0C8010E948E18E4 +:10202000C8010E947F072A96CE010E948F0664E0B5 +:10203000CE010E94BC06811107C062E370E080E01F +:1020400090E00E947916F0CFDF91CF911F910F9110 +:1020500008952F923F924F925F926F927F928F924C +:102060009F92AF92BF92CF92DF92EF92FF920F9327 +:102070001F93CF93DF93CDB7DEB729970FB6F894B0 +:10208000DEBF0FBECDBF3C0120E7620E711CF30125 +:102090002081222309F402C15A011B0199878887F4 +:1020A0007A9781E08083E885F985EB5AFF4F1082AB +:1020B000E885F985EC5AFF4F1082E885F985108E86 +:1020C0008F01025B1F4F61E0C8010E94C407888531 +:1020D00099858D5A9F4F9D838C83C884D98497E5B9 +:1020E000C90ED11CE884F984E8E5EE0EF11C888560 +:1020F00099858E5A9F4F9A838983E885F985EF5891 +:10210000FF4FFF83EE8388849984FAE08F0E911C41 +:102110004884598425E2420E511C888599850E9485 +:10212000E30D8823D1F3F1018491882329F0EC8118 +:10213000FD81F081FB8301C01B822EED32E040E087 +:1021400060E0C8010E94CF09A114B10439F04B81AD +:10215000445F950160E0C8010E94CF09F60110823A +:102160002CE0F7012083B101C8010E945018E981D9 +:10217000FA818081982F990F890F81958D5AF601E8 +:102180008083EC81FD818081982F990F890F819543 +:10219000835DF7018083EE81FF81808184FF03C02E +:1021A0006AED72E002C066ED72E0C8010E948E180E +:1021B000E981FA818081982F990F890F81958D5A35 +:1021C000F6018083F70180818F5F8083E885F98540 +:1021D00082A5882319F062ED72E002C06EEC72E015 +:1021E000C8010E948E18E981FA818081982F990F89 +:1021F000890F81958D5AF6018083F70180818F5F69 +:1022000080836AEC72E0C8010E948E1865E0C40108 +:102210000E94BC06882351F0E885F98562A56F5FAE +:10222000C2010E944615C2010E94301564E0C4013B +:102230000E94BC06811113C0F3012081422F50E09F +:1022400060E070E0EE81FF8180819181A281B381A5 +:1022500084179507A607B707A8F02F3F99F08FEFCF +:10226000F3018083088519850B5D1F4F60E0C8016D +:102270000E942313C8010E94041581E0E885F985B6 +:10228000808F0CC066E0C4010E94BC06882309F45C +:1022900044CF888599850E94EC0F35CF29960FB6DB +:1022A000F894DEBF0FBECDBFDF91CF911F910F918C +:1022B000FF90EF90DF90CF90BF90AF909F908F9066 +:1022C0007F906F905F904F903F902F90089540E0E7 +:1022D00050E00C942910E0E8F7E72591349181E073 +:1022E0002130304C09F080E00895CF93DF93EC016A +:1022F0000E946B119E01275A3F4FDE01A059BF4F2C +:10230000882309F43CC0E6E9F7E78491F90180836A +:10231000E7E9F7E7E491EC83E8E9F7E7E491ED8397 +:10232000E9E9F7E7859194919F838E83EBE9F7E7DD +:102330008591949199878887EDE9F7E7E491EBA778 +:10234000EEE9F7E7E491EAA7EFE9F7E7E491EC9328 +:10235000E0EAF7E7859194919D8F8C8FE2EAF7E7A9 +:10236000859194919F8F8E8FE4EAF7E78591949100 +:1023700099A388A3E6EAF7E78591949120C08CE3BE +:10238000F90180831C828FEF8D8320E233E03F834D +:102390002E8324ED33E03987288791E09BA79AA705 +:1023A0008C938CEA9DE09D8F8C8F8EED9DE09F8FAE +:1023B0008E8F84E79EE099A388A38CE39FE09BA384 +:1023C0008AA3DF91CF910895CF92DF92EF920F937E +:1023D000CF93DF93EC01FC01E158FF4F82E3808350 +:1023E000349781E090E0A0E0B0E080839183A28305 +:1023F000B3833B978FEF8083CE010E947511CE018E +:102400000E9454156FEFCE010E9458156E018AE0AC +:10241000C80ED11CC6010E947F06C6010E948F060D +:10242000CE0148960E94BB158EE0E82E0FE020E119 +:102430004BE06DE0CE01825B9F4F0E94270BA5967B +:10244000CE010E948F1265E0C6010E94BC0688235F +:1024500051F060E0CE01DF91CF910F91EF90DF90CE +:10246000CF900C94461540E06EE473E0CE01DF910E +:10247000CF910F91EF90DF90CF900C942E13CF93CC +:10248000DF93D62FC72F0E946B11882359F0AD2FF1 +:10249000BC2FEBE8F7E784918D933196E53987E718 +:1024A000F807C9F7DF91CF91089550E0DA01AA0F3C +:1024B000BB1FA80FB91F1F963C911F9750962C91D8 +:1024C0005097E32FF22FE60FF11DE60FF11D259136 +:1024D000349190963C932E935F97F9016591749196 +:1024E000FC017481769F602D1124DC01A40FB51FBF +:1024F00091966C939197F90185919491E92FF0E071 +:10250000862F90E0E817F90720F4F901859194915E +:10251000692F769F602D112492966C93089521E087 +:10252000FC01248324E020A72DEA33E0308B2787A9 +:1025300040E060E00E94551261E070E083E00E949C +:10254000F716E1EBF0E08081887F81608083F8946A +:1025500010928000E1E8F0E0108210928500109265 +:10256000840088E191E090938900809388008081C5 +:1025700088608083808181608083EFE6F0E08081E5 +:1025800082608083789408950F93FC01842F011159 +:102590002AC06230D9F050F4662399F0613019F501 +:1025A00040E0682FCF010F910C9455126330A9F0D1 +:1025B0006430C9F46481649F802D1124858F268F37 +:1025C00012C04B3008F08AE0868B0DC06481649F96 +:1025D000802D1124818F228F06C06481649F802DFD +:1025E0001124838F248F0F910895FC0121110EC0B7 +:1025F000648B8481849F402D1124458B15A214A2E5 +:1026000013A281E0878B80930104108E089580913E +:102610000104882319F08091FE0301C080E08093BB +:10262000B4000895FC0161110DC0178A158A14A227 +:1026300013A2108E1092FE031092FF031092010459 +:102640000C9407130895CF93DF93611104C0EC013C +:102650000E9412131982DF91CF9108950F931F9357 +:10266000CF93DF93411110C08B01EC0160E00E9419 +:1026700023131E870D871B8A1A8A81E0898389E0CC +:102680008E8B198E1B8E1D8EDF91CF911F910F9116 +:102690000895CF93DF93DC01611131C08C918823C1 +:1026A00071F111968C911197811129C019968C9115 +:1026B000199717962C91179718969C911897E22FB7 +:1026C000F92FE80FF11DE80FF11D259134912F3FEF +:1026D0008FEF380711F41C9212C0ED013C873327AD +:1026E000220F331FEA85FB85E20FF31F659174917A +:1026F00040E0CD010E942E1389858F5F8987DF918D +:10270000CF91089560E00C94491360E00C9423137A +:102710000F93CF93DF93EC0161115CC08981882313 +:1027200009F458C08D89811155C02D853E85EA89EF +:10273000FB89EE0FFF1FE20FF31F85919491009725 +:1027400001F58989813021F41B8A1A8AF90110C0A8 +:102750001982888160E0882371F0CE010E944913BC +:10276000EA89FB89EE0FFF1F8D859E85E80FF91F13 +:102770008591949106C0CE01DF91CF910F910C9479 +:102780001213BC01769567957695679580FF17C003 +:10279000AC0186E0569547958A95E1F7292F269555 +:1027A0002695269520514F716F7000E0CE010E9452 +:1027B000C412EA89FB893196FB8BEA8BD3CF492F70 +:1027C0006F7320E0CE010E94F5128A899B890196E1 +:1027D0009B8B8A8BDF91CF910F91089560E00C94D1 +:1027E0008813CF93DF93EC016111BAC08F898823DE +:1027F00009F4B6C09D89911105C0CE01DF91CF913A +:102800000C94121391509D8B8DA1811139C02BA175 +:102810003CA12F5F3F4FC901880F991FEF8DF8A191 +:10282000E80FF91F65917491862F87708EA3AB0115 +:1028300063E0569547956A95E1F7CA0196958795A5 +:10284000972F969596959FA38F739C81899F802D36 +:1028500011248DA341704093FD033CA32BA389A1B8 +:1028600090E02817390760F02AA1222329F0821B63 +:1028700091099CA38BA304C060E0CE010E941213B7 +:102880008DA181508DA3888D21E0280F288F4C8940 +:102890003FA1340F8C85380F3A836B8D662361F02E +:1028A00070E0822F022E000C990B0E94FD198C8D76 +:1028B000869F300D11243A838A8190E0CB966BE39A +:1028C00070E00E94FD198A833E893B83698D6623EF +:1028D00071F0062E000C770B822F022E000C990B44 +:1028E0000E94FD198A8D869F300D11243B836D8DCA +:1028F000662389F0822F220F990B70E00E94FD1948 +:10290000CB0162E070E00E94FD192E8D9B81289F13 +:10291000900D11249B834F3341F08B818A300CF052 +:1029200089E087FD80E08B8301C01B82F894EA81F7 +:10293000F0E0E45AFC4FE491E09300048D8198A507 +:10294000899F802D11249B81899F802D11249EA118 +:10295000899F802D11248093FF038093FE03789438 +:10296000DF91CF91089560E00C94F1136091FF0323 +:10297000662329F1809102048F5F80930204909175 +:1029800000048917E0F081E090910104911180E04A +:1029900080930104109202048091FD03882369F062 +:1029A0008091000193E4899F802D1124895B80939D +:1029B00000010E94DD199093FE030C940713089503 +:1029C0001F920F920FB60F9211242F933F934F93A4 +:1029D0005F936F937F938F939F93AF93BF93EF9387 +:1029E000FF930E94B614FF91EF91BF91AF919F9119 +:1029F0008F917F916F915F914F913F912F910F90A8 +:102A00000FBE0F901F901895CF93DF93EC0160E0FD +:102A10000E94231385EA93E09E878D871B8A1A8A7A +:102A200081E0898389E08E8B198E1B8E1D8EDF914C +:102A3000CF910895CF93DF93EC0160E00E942313C0 +:102A40008DE993E09E878D871B8A1A8A81E08983AE +:102A500089E08E8B198E1B8E1D8EDF91CF9108958C +:102A6000CF93DF93EC0160E00E94231387E993E0AA +:102A70009E878D871B8A1A8A81E0898389E08E8BE5 +:102A8000198E1B8E1D8EDF91CF910895FC01262F8C +:102A9000660F330B9681692F70E06F5F7F4FC9011E +:102AA0000E94FD198583089521E0FC01208308958B +:102AB00070E085E00C94F716AF92BF92CF92DF9250 +:102AC000EF92FF920F931F93CF93DF93EC018981D5 +:102AD0009A812FE0289F8001299F100D112485E104 +:102AE0000E94DA16800F911F24E0969587952A950B +:102AF000E1F79A8389832881222391F1EC81AD80CB +:102B0000B12CC12CD12CA885B9857D0100E010E045 +:102B10006E817F819B0140E050E08617970728F087 +:102B2000BC01A817B90708F4BD0180E090E01F922E +:102B30001F921F92EF930E9458196B830F900F9072 +:102B40000F900F9070E085E0DF91CF911F910F9172 +:102B5000FF90EF90DF90CF90BF90AF900C94F7165E +:102B6000DF91CF911F910F91FF90EF90DF90CF9069 +:102B7000BF90AF900895FC018CE39FE09383828324 +:102B800084E0818381E084870895CF93DF93FC0103 +:102B900024813581232B79F1EC0184858F7141F5F6 +:102BA00084E10E94DA16BC01990F880B990B0E94F0 +:102BB000A31A26EE3FE34EEC50E40E942F1B0E9426 +:102BC000721A9B017B836A83672B81F084E089837F +:102BD000FE01349680E0419151912417350710F49D +:102BE000898309C08F5F8430B1F702C08FEF89837A +:102BF0008C858F5F8C87DF91CF9108951F920F9204 +:102C00000FB60F9211242F933F938F939F93AF93FF +:102C1000BF938091040490910504A0910604B091A3 +:102C200007043091030423E0230F2D3720F401968D +:102C3000A11DB11D05C026E8230F0296A11DB11DDF +:102C4000209303048093040490930504A093060446 +:102C5000B09307048091080490910904A0910A049C +:102C6000B0910B040196A11DB11D809308049093AF +:102C70000904A0930A04B0930B04BF91AF919F91F4 +:102C80008F913F912F910F900FBE0F901F9018952D +:102C90002FB7F894609104047091050480910604A4 +:102CA000909107042FBF08953FB7F89480910804CE +:102CB00090910904A0910A04B0910B0426B5A89B39 +:102CC00005C02F3F19F00196A11DB11D3FBFBA2FBE +:102CD000A92F982F8827820F911DA11DB11DBC011E +:102CE000CD0142E0660F771F881F991F4A95D1F7E3 +:102CF0000895CF92DF92EF92FF92CF93DF936B0113 +:102D00007C010E945416EB01C114D104E104F104CA +:102D100079F00E9454166C1B7D0B683E7340A0F343 +:102D200081E0C81AD108E108F108C851DC4FECCFA6 +:102D3000DF91CF91FF90EF90DF90CF90089578943E +:102D400084B5826084BD84B5816084BD85B58260B0 +:102D500085BD85B5816085BDEEE6F0E0808181604E +:102D60008083E1E8F0E0108280818260808380814E +:102D700081608083E0E8F0E0808181608083E1EB26 +:102D8000F0E0808184608083E0EBF0E0808181600E +:102D90008083EAE7F0E080818460808380818260C4 +:102DA00080838081816080838081806880831092AD +:102DB000C10008958E3008F08E502091010190E4FA +:102DC000299F900111248770822B80937C00809131 +:102DD0007A00806480937A0080917A0086FDFCCF2F +:102DE000809178002091790090E0922B08951F93B4 +:102DF000CF93DF93182FEB0161E00E947F1720979C +:102E000011F460E004C0CF3FD10539F461E0812FB7 +:102E1000DF91CF911F910C94BB17E12FF0E0E754A5 +:102E2000FC4FE491E330F9F048F4E130B9F0E230DE +:102E3000A1F584B5806284BDC8BD34C0E630E9F038 +:102E4000E73019F1E43049F5809180008062809389 +:102E50008000D0938B00C0938A0024C084B5806822 +:102E600084BDC7BD1FC080918000806880938000B2 +:102E7000D0938900C093880015C08091B00080680D +:102E80008093B000C093B3000DC08091B000806209 +:102E90008093B000C093B40005C0C038D1050CF0D9 +:102EA000B5CFAFCFDF91CF911F910895833081F0DF +:102EB00028F4813099F08230A1F008958630A9F08D +:102EC0008730B9F08430D1F4809180008F7D03C0C9 +:102ED000809180008F7780938000089584B58F77EC +:102EE00002C084B58F7D84BD08958091B0008F7736 +:102EF00003C08091B0008F7D8093B0000895CF9380 +:102F0000DF9390E0FC01E353FC4F2491FC01EF516F +:102F1000FC4F8491882361F190E0880F991FFC0198 +:102F2000E75FFB4FC591D491FC01E150FC4FA591A7 +:102F3000B491611109C09FB7F894888120958223CC +:102F40008883EC912E230BC0623061F49FB7F89414 +:102F50008881322F309583238883EC912E2B2C93FC +:102F60009FBF06C08FB7F894E8812E2B28838FBFB0 +:102F7000DF91CF9108951F93CF93DF93282F30E0F7 +:102F8000F901E754FC4F8491F901E353FC4FD491CC +:102F9000F901EF51FC4FC491CC23C1F0162F8111E0 +:102FA0000E945617EC2FF0E0EE0FFF1FE150FC4F90 +:102FB000A591B4919FB7F894111104C08C91D0954C +:102FC000D82302C0EC91DE2BDC939FBFDF91CF9121 +:102FD0001F910895CF93DF93282F30E0F901E75434 +:102FE000FC4F8491F901E353FC4FD491F901EF5167 +:102FF000FC4FC491CC2391F081110E945617EC2F05 +:10300000F0E0EE0FFF1FEB50FC4FA591B491EC9157 +:10301000ED2381E090E021F480E002C080E090E0C8 +:10302000DF91CF910895CF92DF92EF92FF920F93AD +:103030001F93CF93DF936C01EB017B01E40EF51E30 +:1030400000E010E0CE15DF0561F06991D601ED9149 +:10305000FC910190F081E02DC6010995080F191F20 +:10306000F1CFC801DF91CF911F910F91FF90EF90A9 +:10307000DF90CF9008956115710579F0FB01019003 +:103080000020E9F73197AF01461B570BDC01ED91AA +:10309000FC910280F381E02D099480E090E0089596 +:1030A000EF92FF920F931F93CF93DF937C01FB016D +:1030B00000E010E06491EF012196662361F0D701F2 +:1030C000ED91FC910190F081E02DC7010995080F69 +:1030D000191FFE01EFCFC801DF91CF911F910F9112 +:1030E000FF90EF900895DC01ED91FC910190F0814B +:1030F000E02D09940F931F93CF93DF93EC016DE0C4 +:103100000E9473188C016AE0CE010E947318800F30 +:10311000911FDF91CF911F910F9108950F931F93EE +:10312000CF93DF93EC010E9450188C01CE010E94D6 +:103130007A18800F911FDF91CF911F910F91089501 +:103140008F929F92AF92BF92CF92DF92EF92FF92B7 +:103150000F931F93CF93DF93CDB7DEB7A1970FB631 +:10316000F894DEBF0FBECDBF6C01142FE52FCB014D +:10317000022F19A2223008F40AE07E0121E2E20EB9 +:10318000F11C802E912CA12CB12C612F7E2FA5013A +:1031900094010E94111A029F1019112481E0E81A6B +:1031A000F1081A3014F4105D01C0195CF7011083A6 +:1031B000122FE32FCA01232B242B252B31F7B70124 +:1031C000C6010E943B18A1960FB6F894DEBF0FBE51 +:1031D000CDBFDF91CF911F910F91FF90EF90DF90C6 +:1031E000CF90BF90AF909F908F900895211531059B +:1031F00041F4DC01ED91FC910190F081E02D642F10 +:1032000009940C94A0189A01AB0160E070E00C9452 +:10321000F618CF92DF92EF92FF920F931F93CF9306 +:10322000DF932115310581F4DC01ED91FC910190D2 +:10323000F081E02D642FDF91CF911F910F91FF90CE +:10324000EF90DF90CF9009942A30310501F577FF98 +:103250001DC06A017B01EC016DE20E9473188C01B4 +:1032600044275527BA014C195D096E097F092AE0E8 +:10327000CE010E94A018800F911FDF91CF911F9166 +:103280000F91FF90EF90DF90CF9008952AE0DF91AB +:10329000CF911F910F91FF90EF90DF90CF900C9402 +:1032A000A0189A01AB01770F660B770B0C940919E4 +:1032B0004F925F926F927F92AF92BF92CF92DF92C6 +:1032C000EF92FF920F931F93CF93DF93CDB7DEB7AB +:1032D00029013A019B01AC01241935094609570916 +:1032E00089899A89AB89BC89BC01CD016A197B099E +:1032F0008C099D090E94CD19A8019701241935094F +:10330000460957090E94331ACA01B9016A0D7B1D8B +:103310008C1D9D1DDF91CF911F910F91FF90EF901C +:10332000DF90CF90BF90AF907F906F905F904F9065 +:103330000895089561E08AE00E94BB1761E08AE089 +:103340000E947F178CB580618CBD8CB580648CBD6C +:1033500061E08DE00E947F1761E08BE00C947F17A5 +:10336000811103C08CB5806202C08CB58F7D8CBD8D +:1033700008959CB5937F892B8CBD08959CB59C7F47 +:10338000282F2370922B9CBD2DB582FB992790F995 +:10339000822F8E7F892B8DBD0895DB018F939F93A4 +:1033A0000E94521ABF91AF91A29F800D911DA39FC1 +:1033B000900DB29F900D11240895991B79E004C0DF +:1033C000991F961708F0961B881F7A95C9F7809564 +:1033D0000895AA1BBB1B51E107C0AA1FBB1FA6175C +:1033E000B70710F0A61BB70B881F991F5A95A9F7AE +:1033F00080959095BC01CD01089597FB072E16F49A +:10340000009407D077FD09D00E94E91907FC05D088 +:103410003EF4909581959F4F0895709561957F4FEB +:103420000895A1E21A2EAA1BBB1BFD010DC0AA1F05 +:10343000BB1FEE1FFF1FA217B307E407F50720F01D +:10344000A21BB30BE40BF50B661F771F881F991F98 +:103450001A9469F760957095809590959B01AC01E1 +:10346000BD01CF010895052E97FB1EF400940E9424 +:103470004A1A57FD07D00E94111A07FC03D04EF4D8 +:103480000C944A1A50954095309521953F4F4F4FD7 +:103490005F4F089590958095709561957F4F8F4F00 +:1034A0009F4F08950E94631AA59F900DB49F900DA1 +:1034B000A49F800D911D11240895EE0FFF1F05900C +:1034C000F491E02D0994A29FB001B39FC001A39F86 +:1034D000700D811D1124911DB29F700D811D11244D +:1034E000911D08950E940E1B88F09F5798F0B92FE8 +:1034F0009927B751B0F0E1F0660F771F881F991F29 +:103500001AF0BA95C9F714C0B13091F00E94281B87 +:10351000B1E008950C94281B672F782F8827B85F97 +:1035200039F0B93FCCF3869577956795B395D9F780 +:103530003EF490958095709561957F4F8F4F9F4F8A +:103540000895E89409C097FB3EF490958095709596 +:1035500061957F4F8F4F9F4F9923A9F0F92F96E9DF +:10356000BB279395F695879577956795B795F11154 +:10357000F8CFFAF4BB0F11F460FF1BC06F5F7F4FF1 +:103580008F4F9F4F16C0882311F096E911C0772303 +:1035900021F09EE8872F762F05C0662371F096E80C +:1035A000862F70E060E02AF09A95660F771F881FDB +:1035B000DAF7880F9695879597F9089597F99F6799 +:1035C00080E870E060E008959FEF80EC08950024AB +:1035D0000A941616170618060906089500240A9478 +:1035E00012161306140605060895092E0394000CFE +:1035F00011F4882352F0BB0F40F4BF2B11F460FF8D +:1036000004C06F5F7F4F8F4F9F4F089557FD9058B5 +:10361000440F551F59F05F3F71F04795880F97FB96 +:10362000991F61F09F3F79F0879508951216130650 +:103630001406551FF2CF4695F1DF08C0161617067F +:103640001806991FF1CF86957105610508940895B4 +:10365000E894BB2766277727CB0197F908950E9446 +:10366000421B0C94F51A0E94E71A38F00E94EE1AD9 +:1036700020F0952311F00C94DE1A0C94E41A112416 +:103680000C94291B0E94061B70F3959FC1F3950FA4 +:1036900050E0551F629FF001729FBB27F00DB11DD6 +:1036A000639FAA27F00DB11DAA1F649F6627B00D66 +:1036B000A11D661F829F2227B00DA11D621F739F4F +:1036C000B00DA11D621F839FA00D611D221F749F5D +:1036D0003327A00D611D231F849F600D211D822FA4 +:1036E000762F6A2F11249F5750409AF0F1F08823CB +:1036F0004AF0EE0FFF1FBB1F661F771F881F9150F8 +:103700005040A9F79E3F510580F00C94DE1A0C94AE +:10371000291B5F3FE4F3983ED4F386957795679530 +:10372000B795F795E7959F5FC1F7FE2B880F911D21 +:103730009695879597F90895DC0101C06D934150E6 +:103740005040E0F70895FB01DC014150504048F043 +:1037500001900D920020C9F701C01D9241505040C8 +:08376000E0F70895F894FFCF93 +:1037680001010019230000000086020000000099F2 +:103778001900000000000000000000000000000028 +:1037880000980500000000000000000000DE0300B3 +:103798000021040000FF03000042040000000000B4 +:1037A8000000000000000000000000000000000011 +:1037B800000000000000000000AD050000970500B3 +:1037C8000000000000000000008C0C13184C4F4152 +:0437D8004445520012 +:040000030000046A8B :00000001FF diff --git a/Exe/POCKET.MAP b/Exe/POCKET.MAP index 9e04e10..fa94013 100644 --- a/Exe/POCKET.MAP +++ b/Exe/POCKET.MAP @@ -3,7 +3,7 @@ Archive member included to satisfy reference by file (symbol) ../lib/libgamebuino.a(Buttons.o) Obj/Game.o (_ZN7Buttons8releasedEh) ../lib/libgamebuino.a(Display.o) - Obj/Sprite.o (_ZN7Display8setColorEaa) + Obj/HumanPlayer.o (_ZN7Display8setColorEa) ../lib/libgamebuino.a(font3x5.o) ../lib/libgamebuino.a(Display.o) (font3x5) ../lib/libgamebuino.a(Gamebuino.o) @@ -191,6 +191,8 @@ Discarded input sections .text 0x0000000000000000 0x0 Obj/Camera.o .data 0x0000000000000000 0x0 Obj/Camera.o .bss 0x0000000000000000 0x0 Obj/Camera.o + .text._ZN6Camera10adjustLockEb + 0x0000000000000000 0x6 Obj/Camera.o .text 0x0000000000000000 0x0 Obj/BaseUnit.o .data 0x0000000000000000 0x0 Obj/BaseUnit.o .bss 0x0000000000000000 0x0 Obj/BaseUnit.o @@ -200,6 +202,12 @@ Discarded input sections .text 0x0000000000000000 0x0 Obj/Menu.o .data 0x0000000000000000 0x0 Obj/Menu.o .bss 0x0000000000000000 0x0 Obj/Menu.o + .text 0x0000000000000000 0x0 Obj/Cursor.o + .data 0x0000000000000000 0x0 Obj/Cursor.o + .bss 0x0000000000000000 0x0 Obj/Cursor.o + .text 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o + .data 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o + .bss 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o .text 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) .data 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) .bss 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) @@ -217,8 +225,6 @@ Discarded input sections 0x0000000000000000 0x34 ../lib/libgamebuino.a(Display.o) .text._ZN7Display10fillScreenEh 0x0000000000000000 0x10 ../lib/libgamebuino.a(Display.o) - .text._ZN7Display8drawRectEaaaa - 0x0000000000000000 0x50 ../lib/libgamebuino.a(Display.o) .text._ZN7Display8drawLineEaaaa 0x0000000000000000 0xf2 ../lib/libgamebuino.a(Display.o) .text._ZN7Display10drawCircleEaaa @@ -1030,6 +1036,8 @@ LOAD Obj/Camera.o LOAD Obj/BaseUnit.o LOAD Obj/Unit.o LOAD Obj/Menu.o +LOAD Obj/Cursor.o +LOAD Obj/HumanPlayerBtn.o LOAD ../lib/libgamebuino.a LOAD ../lib/libarduino.a LOAD /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a @@ -1138,7 +1146,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x348c +.text 0x0000000000000000 0x3768 *(.vectors) .vectors 0x0000000000000000 0x68 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o 0x0000000000000000 __vectors @@ -1160,584 +1168,630 @@ END GROUP 0x000000000000006f 0x5 Obj/Game.o .progmem.data._ZZL9GamePausevE20astrPauseMenuOptions 0x0000000000000074 0x4 Obj/Game.o + .progmem.data._ZL15au8MouseSprData + 0x0000000000000078 0xa Obj/HumanPlayer.o .progmem.data._ZL17au8PeasantSprData - 0x0000000000000078 0xa Obj/Unit.o + 0x0000000000000082 0xa Obj/Unit.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_0 - 0x0000000000000082 0x13 Obj/Menu.o + 0x000000000000008c 0x13 Obj/Menu.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_1 - 0x0000000000000095 0x11 Obj/Menu.o + 0x000000000000009f 0x11 Obj/Menu.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_2 - 0x00000000000000a6 0x8 Obj/Menu.o + 0x00000000000000b0 0x8 Obj/Menu.o .progmem.data._ZZ8MainMenuvE19astrMainMenuOptions - 0x00000000000000ae 0x6 Obj/Menu.o + 0x00000000000000b8 0x6 Obj/Menu.o .progmem.data._ZZ8MainMenuvE3__c - 0x00000000000000b4 0xf Obj/Menu.o + 0x00000000000000be 0xf Obj/Menu.o .progmem.data.font3x5 - 0x00000000000000c3 0x182 ../lib/libgamebuino.a(font3x5.o) - 0x00000000000000c3 font3x5 + 0x00000000000000cd 0x182 ../lib/libgamebuino.a(font3x5.o) + 0x00000000000000cd font3x5 .progmem.data._ZZN9Gamebuino10changeGameEvE3__c_0 - 0x0000000000000245 0x25 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000024f 0x25 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino10changeGameEvE3__c - 0x000000000000026a 0x28 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000000274 0x28 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_1 - 0x0000000000000292 0xb ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000029c 0xb ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_0 - 0x000000000000029d 0x15 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002a7 0x15 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c - 0x00000000000002b2 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002bc 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_3 - 0x00000000000002c0 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002ca 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_2 - 0x00000000000002c4 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002ce 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_1 - 0x00000000000002c8 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002d2 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_0 - 0x00000000000002cc 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002d6 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c - 0x00000000000002d0 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002da 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL13gamebuinoLogo - 0x00000000000002d4 0x70 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002de 0x70 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12startupSound - 0x0000000000000344 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000034e 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12_halfPeriods - 0x0000000000000352 0x3b ../lib/libgamebuino.a(Sound.o) + 0x000000000000035c 0x3b ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL9playTickP - 0x000000000000038d 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000000397 0x6 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL17playCancelPattern - 0x0000000000000393 0x8 ../lib/libgamebuino.a(Sound.o) + 0x000000000000039d 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL13playOKPattern - 0x000000000000039b 0x8 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003a5 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL18defaultInstruments - 0x00000000000003a3 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003ad 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL15noiseInstrument - 0x00000000000003a7 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003b1 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL20squareWaveInstrument - 0x00000000000003ab 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003b5 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data.digital_pin_to_timer_PGM - 0x00000000000003af 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003af digital_pin_to_timer_PGM + 0x00000000000003b9 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003b9 digital_pin_to_timer_PGM .progmem.data.digital_pin_to_bit_mask_PGM - 0x00000000000003c3 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003c3 digital_pin_to_bit_mask_PGM + 0x00000000000003cd 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003cd digital_pin_to_bit_mask_PGM .progmem.data.digital_pin_to_port_PGM - 0x00000000000003d7 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003d7 digital_pin_to_port_PGM + 0x00000000000003e1 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003e1 digital_pin_to_port_PGM .progmem.data.port_to_input_PGM - 0x00000000000003eb 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003eb port_to_input_PGM - .progmem.data.port_to_output_PGM 0x00000000000003f5 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003f5 port_to_output_PGM - .progmem.data.port_to_mode_PGM + 0x00000000000003f5 port_to_input_PGM + .progmem.data.port_to_output_PGM 0x00000000000003ff 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003ff port_to_mode_PGM - 0x000000000000040a . = ALIGN (0x2) - *fill* 0x0000000000000409 0x1 + 0x00000000000003ff port_to_output_PGM + .progmem.data.port_to_mode_PGM + 0x0000000000000409 0xa ../lib/libarduino.a(wiring_digital.o) + 0x0000000000000409 port_to_mode_PGM + 0x0000000000000414 . = ALIGN (0x2) + *fill* 0x0000000000000413 0x1 *(.jumptables) *(.jumptables*) *(.lowtext) *(.lowtext*) - 0x000000000000040a __ctors_start = . + 0x0000000000000414 __ctors_start = . *(.ctors) - .ctors 0x000000000000040a 0x2 Obj/System.o - 0x000000000000040c __ctors_end = . - 0x000000000000040c __dtors_start = . + .ctors 0x0000000000000414 0x2 Obj/System.o + 0x0000000000000416 __ctors_end = . + 0x0000000000000416 __dtors_start = . *(.dtors) - 0x000000000000040c __dtors_end = . + 0x0000000000000416 __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x000000000000040c 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o - 0x000000000000040c __init + .init0 0x0000000000000416 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000416 __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x000000000000040c 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + .init2 0x0000000000000416 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o *(.init2) *(.init3) *(.init3) *(.init4) - .init4 0x0000000000000418 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - 0x0000000000000418 __do_copy_data - .init4 0x000000000000042e 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - 0x000000000000042e __do_clear_bss + .init4 0x0000000000000422 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x0000000000000422 __do_copy_data + .init4 0x0000000000000438 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x0000000000000438 __do_clear_bss *(.init4) *(.init5) *(.init5) *(.init6) - .init6 0x000000000000043e 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ctors.o) - 0x000000000000043e __do_global_ctors + .init6 0x0000000000000448 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ctors.o) + 0x0000000000000448 __do_global_ctors *(.init6) *(.init7) *(.init7) *(.init8) *(.init8) *(.init9) - .init9 0x0000000000000454 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + .init9 0x000000000000045e 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o *(.init9) *(.text) - .text 0x000000000000045c 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o - 0x000000000000045c __vector_22 - 0x000000000000045c __vector_1 - 0x000000000000045c __vector_24 - 0x000000000000045c __vector_12 - 0x000000000000045c __bad_interrupt - 0x000000000000045c __vector_6 - 0x000000000000045c __vector_3 - 0x000000000000045c __vector_23 - 0x000000000000045c __vector_25 - 0x000000000000045c __vector_13 - 0x000000000000045c __vector_17 - 0x000000000000045c __vector_19 - 0x000000000000045c __vector_7 - 0x000000000000045c __vector_5 - 0x000000000000045c __vector_4 - 0x000000000000045c __vector_9 - 0x000000000000045c __vector_2 - 0x000000000000045c __vector_21 - 0x000000000000045c __vector_15 - 0x000000000000045c __vector_8 - 0x000000000000045c __vector_14 - 0x000000000000045c __vector_10 - 0x000000000000045c __vector_18 - 0x000000000000045c __vector_20 - 0x0000000000000460 . = ALIGN (0x2) + .text 0x0000000000000466 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000466 __vector_22 + 0x0000000000000466 __vector_1 + 0x0000000000000466 __vector_24 + 0x0000000000000466 __vector_12 + 0x0000000000000466 __bad_interrupt + 0x0000000000000466 __vector_6 + 0x0000000000000466 __vector_3 + 0x0000000000000466 __vector_23 + 0x0000000000000466 __vector_25 + 0x0000000000000466 __vector_13 + 0x0000000000000466 __vector_17 + 0x0000000000000466 __vector_19 + 0x0000000000000466 __vector_7 + 0x0000000000000466 __vector_5 + 0x0000000000000466 __vector_4 + 0x0000000000000466 __vector_9 + 0x0000000000000466 __vector_2 + 0x0000000000000466 __vector_21 + 0x0000000000000466 __vector_15 + 0x0000000000000466 __vector_8 + 0x0000000000000466 __vector_14 + 0x0000000000000466 __vector_10 + 0x0000000000000466 __vector_18 + 0x0000000000000466 __vector_20 + 0x000000000000046a . = ALIGN (0x2) *(.text.*) .text.startup.main - 0x0000000000000460 0xa Obj/main.o - 0x0000000000000460 main + 0x000000000000046a 0xa Obj/main.o + 0x000000000000046a main .text._Z4GameRK11tGameConfig - 0x000000000000046a 0x7e Obj/Game.o - 0x000000000000046a _Z4GameRK11tGameConfig + 0x0000000000000474 0x76 Obj/Game.o + 0x0000000000000474 _Z4GameRK11tGameConfig .text._Z10SystemInitv - 0x00000000000004e8 0xc Obj/System.o - 0x00000000000004e8 _Z10SystemInitv + 0x00000000000004ea 0xc Obj/System.o + 0x00000000000004ea _Z10SystemInitv .text.startup._GLOBAL__sub_I_gb - 0x00000000000004f4 0x16 Obj/System.o + 0x00000000000004f6 0x16 Obj/System.o .text._ZN11HumanPlayer11drawHandlerEv - 0x000000000000050a 0x2 Obj/HumanPlayer.o - 0x000000000000050a _ZN11HumanPlayer11drawHandlerEv - 0x000000000000050a _ZN11HumanPlayer13onBBtnPressedEv - .text._ZN11HumanPlayer13onABtnPressedEv - 0x000000000000050c 0x2 Obj/HumanPlayer.o - 0x000000000000050c _ZN11HumanPlayer13onABtnPressedEv + 0x000000000000050c 0xa0 Obj/HumanPlayer.o + 0x000000000000050c _ZN11HumanPlayer11drawHandlerEv .text._ZN11HumanPlayerC2EPKcRK6Camera - 0x000000000000050e 0x3e Obj/HumanPlayer.o - 0x000000000000050e _ZN11HumanPlayerC2EPKcRK6Camera - 0x000000000000050e _ZN11HumanPlayerC1EPKcRK6Camera - .text._ZN11HumanPlayer13buttonHandlerEv - 0x000000000000054c 0xde Obj/HumanPlayer.o - 0x000000000000054c _ZN11HumanPlayer13buttonHandlerEv + 0x00000000000005ac 0x56 Obj/HumanPlayer.o + 0x00000000000005ac _ZN11HumanPlayerC2EPKcRK6Camera + 0x00000000000005ac _ZN11HumanPlayerC1EPKcRK6Camera .text._ZN11HumanPlayer7handlerEv - 0x000000000000062a 0x32 Obj/HumanPlayer.o - 0x000000000000062a _ZN11HumanPlayer7handlerEv + 0x0000000000000602 0x22 Obj/HumanPlayer.o + 0x0000000000000602 _ZN11HumanPlayer7handlerEv .text._ZN6SpriteC2EPKhbhh - 0x000000000000065c 0x16 Obj/Sprite.o - 0x000000000000065c _ZN6SpriteC2EPKhbhh - 0x000000000000065c _ZN6SpriteC1EPKhbhh - .text._ZN6Sprite6setPosEhh - 0x0000000000000672 0x8 Obj/Sprite.o - 0x0000000000000672 _ZN6Sprite6setPosEhh + 0x0000000000000624 0x16 Obj/Sprite.o + 0x0000000000000624 _ZN6SpriteC2EPKhbhh + 0x0000000000000624 _ZN6SpriteC1EPKhbhh .text._ZN6Sprite4drawEv - 0x000000000000067a 0x68 Obj/Sprite.o - 0x000000000000067a _ZN6Sprite4drawEv + 0x000000000000063a 0x6e Obj/Sprite.o + 0x000000000000063a _ZN6Sprite4drawEv + .text._ZN6Sprite6setPosEhh + 0x00000000000006a8 0x8 Obj/Sprite.o + 0x00000000000006a8 _ZN6Sprite6setPosEhh .text._ZN6PlayerC2EPKc - 0x00000000000006e2 0x8c Obj/Player.o - 0x00000000000006e2 _ZN6PlayerC1EPKc - 0x00000000000006e2 _ZN6PlayerC2EPKc + 0x00000000000006b0 0x8c Obj/Player.o + 0x00000000000006b0 _ZN6PlayerC1EPKc + 0x00000000000006b0 _ZN6PlayerC2EPKc + .text._ZN6Player11handleUnitsEv + 0x000000000000073c 0x2e Obj/Player.o + 0x000000000000073c _ZN6Player11handleUnitsEv + .text._ZN6Player9drawUnitsEv + 0x000000000000076a 0x2e Obj/Player.o + 0x000000000000076a _ZN6Player9drawUnitsEv .text._ZN6CameraC2Ev - 0x000000000000076e 0x18 Obj/Camera.o - 0x000000000000076e _ZN6CameraC1Ev - 0x000000000000076e _ZN6CameraC2Ev - .text._ZN6Camera7handlerEv - 0x0000000000000786 0x50 Obj/Camera.o - 0x0000000000000786 _ZN6Camera7handlerEv + 0x0000000000000798 0x10 Obj/Camera.o + 0x0000000000000798 _ZN6CameraC1Ev + 0x0000000000000798 _ZN6CameraC2Ev .text._ZNK6Camera4getXEh - 0x00000000000007d6 0x8 Obj/Camera.o - 0x00000000000007d6 _ZNK6Camera4getXEh + 0x00000000000007a8 0xa Obj/Camera.o + 0x00000000000007a8 _ZNK6Camera4getXEh .text._ZNK6Camera4getYEh - 0x00000000000007de 0x8 Obj/Camera.o - 0x00000000000007de _ZNK6Camera4getYEh - .text._ZN6Camera16onLeftBtnPressedEv - 0x00000000000007e6 0x20 Obj/Camera.o - 0x00000000000007e6 _ZN6Camera16onLeftBtnPressedEv - .text._ZN6Camera17onRightBtnPressedEv - 0x0000000000000806 0x3a Obj/Camera.o - 0x0000000000000806 _ZN6Camera17onRightBtnPressedEv - .text._ZN6Camera14onUpBtnPressedEv - 0x0000000000000840 0x20 Obj/Camera.o - 0x0000000000000840 _ZN6Camera14onUpBtnPressedEv - .text._ZN6Camera16onDownBtnPressedEv - 0x0000000000000860 0x1c Obj/Camera.o - 0x0000000000000860 _ZN6Camera16onDownBtnPressedEv + 0x00000000000007b2 0xa Obj/Camera.o + 0x00000000000007b2 _ZNK6Camera4getYEh + .text._ZN6Camera16onLeftBtnPressedER6Cursor + 0x00000000000007bc 0x42 Obj/Camera.o + 0x00000000000007bc _ZN6Camera16onLeftBtnPressedER6Cursor + .text._ZN6Camera17onRightBtnPressedER6Cursor + 0x00000000000007fe 0x44 Obj/Camera.o + 0x00000000000007fe _ZN6Camera17onRightBtnPressedER6Cursor + .text._ZN6Camera14onUpBtnPressedER6Cursor + 0x0000000000000842 0x42 Obj/Camera.o + 0x0000000000000842 _ZN6Camera14onUpBtnPressedER6Cursor + .text._ZN6Camera16onDownBtnPressedER6Cursor + 0x0000000000000884 0x44 Obj/Camera.o + 0x0000000000000884 _ZN6Camera16onDownBtnPressedER6Cursor + .text._ZNK6Camera8isLockedEv + 0x00000000000008c8 0x6 Obj/Camera.o + 0x00000000000008c8 _ZNK6Camera8isLockedEv .text._ZN8BaseUnitC2Ev - 0x000000000000087c 0x12 Obj/BaseUnit.o - 0x000000000000087c _ZN8BaseUnitC1Ev - 0x000000000000087c _ZN8BaseUnitC2Ev + 0x00000000000008ce 0x14 Obj/BaseUnit.o + 0x00000000000008ce _ZN8BaseUnitC1Ev + 0x00000000000008ce _ZN8BaseUnitC2Ev .text._ZN8BaseUnit6createEjj - 0x000000000000088e 0x10 Obj/BaseUnit.o - 0x000000000000088e _ZN8BaseUnit6createEjj + 0x00000000000008e2 0x10 Obj/BaseUnit.o + 0x00000000000008e2 _ZN8BaseUnit6createEjj .text._ZN8BaseUnit7handlerEv - 0x000000000000089e 0x2 Obj/BaseUnit.o - 0x000000000000089e _ZN8BaseUnit7handlerEv + 0x00000000000008f2 0x2 Obj/BaseUnit.o + 0x00000000000008f2 _ZN8BaseUnit7handlerEv .text._ZN4UnitC2ENS_7tUnitIDE - 0x00000000000008a0 0x1e Obj/Unit.o - 0x00000000000008a0 _ZN4UnitC2ENS_7tUnitIDE - 0x00000000000008a0 _ZN4UnitC1ENS_7tUnitIDE + 0x00000000000008f4 0x1e Obj/Unit.o + 0x00000000000008f4 _ZN4UnitC2ENS_7tUnitIDE + 0x00000000000008f4 _ZN4UnitC1ENS_7tUnitIDE .text._ZN4Unit6createENS_7tUnitIDEjj - 0x00000000000008be 0x5c Obj/Unit.o - 0x00000000000008be _ZN4Unit6createENS_7tUnitIDEjj - .text._ZN4Unit11drawHandlerEv - 0x000000000000091a 0x88 Obj/Unit.o - 0x000000000000091a _ZN4Unit11drawHandlerEv + 0x0000000000000912 0x5c Obj/Unit.o + 0x0000000000000912 _ZN4Unit6createENS_7tUnitIDEjj .text._ZN4Unit7handlerEv - 0x00000000000009a2 0x14 Obj/Unit.o - 0x00000000000009a2 _ZN4Unit7handlerEv + 0x000000000000096e 0x4 Obj/Unit.o + 0x000000000000096e _ZN4Unit7handlerEv + .text._ZN4Unit11drawHandlerEv + 0x0000000000000972 0x88 Obj/Unit.o + 0x0000000000000972 _ZN4Unit11drawHandlerEv + .text._ZL20MainMenuSinglePlayerv + 0x00000000000009fa 0x9e Obj/Menu.o .text._Z8MainMenuv - 0x00000000000009b6 0xbc Obj/Menu.o - 0x00000000000009b6 _Z8MainMenuv + 0x0000000000000a98 0x24 Obj/Menu.o + 0x0000000000000a98 _Z8MainMenuv + .text._ZN6CursorC2Ev + 0x0000000000000abc 0xc Obj/Cursor.o + 0x0000000000000abc _ZN6CursorC1Ev + 0x0000000000000abc _ZN6CursorC2Ev + .text._ZN6Cursor4moveEaa + 0x0000000000000ac8 0x3c Obj/Cursor.o + 0x0000000000000ac8 _ZN6Cursor4moveEaa + .text._ZN6Cursor4getXEv + 0x0000000000000b04 0x6 Obj/Cursor.o + 0x0000000000000b04 _ZN6Cursor4getXEv + .text._ZN6Cursor4getYEv + 0x0000000000000b0a 0x6 Obj/Cursor.o + 0x0000000000000b0a _ZN6Cursor4getYEv + .text._ZN6Cursor11isXCenteredEv + 0x0000000000000b10 0xe Obj/Cursor.o + 0x0000000000000b10 _ZN6Cursor11isXCenteredEv + .text._ZN6Cursor11isYCenteredEv + 0x0000000000000b1e 0x10 Obj/Cursor.o + 0x0000000000000b1e _ZN6Cursor11isYCenteredEv + .text._ZN11HumanPlayer13onBBtnPressedEv + 0x0000000000000b2e 0x2 Obj/HumanPlayerBtn.o + 0x0000000000000b2e _ZN11HumanPlayer13onBBtnPressedEv + .text._ZN11HumanPlayer14onABtnReleasedEv + 0x0000000000000b30 0x2a Obj/HumanPlayerBtn.o + 0x0000000000000b30 _ZN11HumanPlayer14onABtnReleasedEv + .text._ZN11HumanPlayer13onABtnPressedEv + 0x0000000000000b5a 0x1e Obj/HumanPlayerBtn.o + 0x0000000000000b5a _ZN11HumanPlayer13onABtnPressedEv + .text._ZN11HumanPlayer26playerButtonPressedHandlerEj + 0x0000000000000b78 0x50 Obj/HumanPlayerBtn.o + 0x0000000000000b78 _ZN11HumanPlayer26playerButtonPressedHandlerEj + .text._ZN11HumanPlayer26cameraButtonPressedHandlerEj + 0x0000000000000bc8 0xa0 Obj/HumanPlayerBtn.o + 0x0000000000000bc8 _ZN11HumanPlayer26cameraButtonPressedHandlerEj + .text._ZN11HumanPlayer27playerButtonReleasedHandlerEj + 0x0000000000000c68 0x50 Obj/HumanPlayerBtn.o + 0x0000000000000c68 _ZN11HumanPlayer27playerButtonReleasedHandlerEj + .text._ZN11HumanPlayer13buttonHandlerEv + 0x0000000000000cb8 0x46 Obj/HumanPlayerBtn.o + 0x0000000000000cb8 _ZN11HumanPlayer13buttonHandlerEv .text._ZN7Buttons5beginEv - 0x0000000000000a72 0x20 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000a72 _ZN7Buttons5beginEv + 0x0000000000000cfe 0x20 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000cfe _ZN7Buttons5beginEv .text._ZN7Buttons6updateEv - 0x0000000000000a92 0x5a ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000a92 _ZN7Buttons6updateEv + 0x0000000000000d1e 0x5a ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d1e _ZN7Buttons6updateEv .text._ZN7Buttons7pressedEh - 0x0000000000000aec 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000aec _ZN7Buttons7pressedEh + 0x0000000000000d78 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d78 _ZN7Buttons7pressedEh .text._ZN7Buttons8releasedEh - 0x0000000000000afe 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000afe _ZN7Buttons8releasedEh + 0x0000000000000d8a 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d8a _ZN7Buttons8releasedEh .text._ZN7Buttons6repeatEhh - 0x0000000000000b10 0x30 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000b10 _ZN7Buttons6repeatEhh + 0x0000000000000d9c 0x30 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d9c _ZN7Buttons6repeatEhh .text._ZN7Buttons8timeHeldEh - 0x0000000000000b40 0x10 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000b40 _ZN7Buttons8timeHeldEh + 0x0000000000000dcc 0x10 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000dcc _ZN7Buttons8timeHeldEh .text._ZN8SPIClass8transferEh - 0x0000000000000b50 0xc ../lib/libgamebuino.a(Display.o) - 0x0000000000000b50 _ZN8SPIClass8transferEh + 0x0000000000000ddc 0xc ../lib/libgamebuino.a(Display.o) + 0x0000000000000ddc _ZN8SPIClass8transferEh .text._ZN7Display9drawPixelEaa - 0x0000000000000b5c 0xb8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000b5c _ZN7Display9drawPixelEaa + 0x0000000000000de8 0xb8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000de8 _ZN7Display9drawPixelEaa .text._ZN7Display7commandEh - 0x0000000000000c14 0x3c ../lib/libgamebuino.a(Display.o) - 0x0000000000000c14 _ZN7Display7commandEh + 0x0000000000000ea0 0x3c ../lib/libgamebuino.a(Display.o) + 0x0000000000000ea0 _ZN7Display7commandEh .text._ZN7Display5clearEv - 0x0000000000000c50 0x22 ../lib/libgamebuino.a(Display.o) - 0x0000000000000c50 _ZN7Display5clearEv + 0x0000000000000edc 0x22 ../lib/libgamebuino.a(Display.o) + 0x0000000000000edc _ZN7Display5clearEv .text._ZN7Display6updateEv - 0x0000000000000c72 0x8a ../lib/libgamebuino.a(Display.o) - 0x0000000000000c72 _ZN7Display6updateEv + 0x0000000000000efe 0x8a ../lib/libgamebuino.a(Display.o) + 0x0000000000000efe _ZN7Display6updateEv .text._ZN7Display8setColorEa - 0x0000000000000cfc 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000cfc _ZN7Display8setColorEa + 0x0000000000000f88 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f88 _ZN7Display8setColorEa .text._ZN7Display8setColorEaa - 0x0000000000000d04 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d04 _ZN7Display8setColorEaa + 0x0000000000000f90 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f90 _ZN7Display8setColorEaa .text._ZN7Display13drawFastVLineEaaa - 0x0000000000000d0c 0x38 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d0c _ZN7Display13drawFastVLineEaaa + 0x0000000000000f98 0x38 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f98 _ZN7Display13drawFastVLineEaaa .text._ZN7Display13drawFastHLineEaaa - 0x0000000000000d44 0x38 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d44 _ZN7Display13drawFastHLineEaaa + 0x0000000000000fd0 0x38 ../lib/libgamebuino.a(Display.o) + 0x0000000000000fd0 _ZN7Display13drawFastHLineEaaa + .text._ZN7Display8drawRectEaaaa + 0x0000000000001008 0x50 ../lib/libgamebuino.a(Display.o) + 0x0000000000001008 _ZN7Display8drawRectEaaaa .text._ZN7Display8fillRectEaaaa - 0x0000000000000d7c 0x52 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d7c _ZN7Display8fillRectEaaaa + 0x0000000000001058 0x52 ../lib/libgamebuino.a(Display.o) + 0x0000000000001058 _ZN7Display8fillRectEaaaa .text._ZN7Display16drawCircleHelperEaaah - 0x0000000000000dce 0xfc ../lib/libgamebuino.a(Display.o) - 0x0000000000000dce _ZN7Display16drawCircleHelperEaaah + 0x00000000000010aa 0xfc ../lib/libgamebuino.a(Display.o) + 0x00000000000010aa _ZN7Display16drawCircleHelperEaaah .text._ZN7Display16fillCircleHelperEaaaha - 0x0000000000000eca 0xcc ../lib/libgamebuino.a(Display.o) - 0x0000000000000eca _ZN7Display16fillCircleHelperEaaaha + 0x00000000000011a6 0xcc ../lib/libgamebuino.a(Display.o) + 0x00000000000011a6 _ZN7Display16fillCircleHelperEaaaha .text._ZN7Display13drawRoundRectEaaaaa - 0x0000000000000f96 0xbe ../lib/libgamebuino.a(Display.o) - 0x0000000000000f96 _ZN7Display13drawRoundRectEaaaaa + 0x0000000000001272 0xbe ../lib/libgamebuino.a(Display.o) + 0x0000000000001272 _ZN7Display13drawRoundRectEaaaaa .text._ZN7Display13fillRoundRectEaaaaa - 0x0000000000001054 0x6e ../lib/libgamebuino.a(Display.o) - 0x0000000000001054 _ZN7Display13fillRoundRectEaaaaa + 0x0000000000001330 0x6e ../lib/libgamebuino.a(Display.o) + 0x0000000000001330 _ZN7Display13fillRoundRectEaaaaa .text._ZN7Display10drawBitmapEaaPKh - 0x00000000000010c2 0x288 ../lib/libgamebuino.a(Display.o) - 0x00000000000010c2 _ZN7Display10drawBitmapEaaPKh + 0x000000000000139e 0x288 ../lib/libgamebuino.a(Display.o) + 0x000000000000139e _ZN7Display10drawBitmapEaaPKh .text._ZN7Display7setFontEPKh - 0x000000000000134a 0x28 ../lib/libgamebuino.a(Display.o) - 0x000000000000134a _ZN7Display7setFontEPKh + 0x0000000000001626 0x28 ../lib/libgamebuino.a(Display.o) + 0x0000000000001626 _ZN7Display7setFontEPKh .text._ZN7Display5beginEaaaaa - 0x0000000000001372 0x180 ../lib/libgamebuino.a(Display.o) - 0x0000000000001372 _ZN7Display5beginEaaaaa + 0x000000000000164e 0x180 ../lib/libgamebuino.a(Display.o) + 0x000000000000164e _ZN7Display5beginEaaaaa .text._ZN7Display8drawCharEaahh - 0x00000000000014f2 0x14a ../lib/libgamebuino.a(Display.o) - 0x00000000000014f2 _ZN7Display8drawCharEaahh + 0x00000000000017ce 0x14a ../lib/libgamebuino.a(Display.o) + 0x00000000000017ce _ZN7Display8drawCharEaahh .text._ZN7Display5writeEh - 0x000000000000163c 0x66 ../lib/libgamebuino.a(Display.o) - 0x000000000000163c _ZN7Display5writeEh + 0x0000000000001918 0x66 ../lib/libgamebuino.a(Display.o) + 0x0000000000001918 _ZN7Display5writeEh .text._ZN9Gamebuino11updatePopupEv - 0x00000000000016a2 0xe0 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000016a2 _ZN9Gamebuino11updatePopupEv + 0x000000000000197e 0xe0 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000197e _ZN9Gamebuino11updatePopupEv .text._ZN9Gamebuino14displayBatteryEv - 0x0000000000001782 0x168 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001782 _ZN9Gamebuino14displayBatteryEv + 0x0000000000001a5e 0x168 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001a5e _ZN9Gamebuino14displayBatteryEv .text._ZN9Gamebuino6updateEv - 0x00000000000018ea 0x176 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000018ea _ZN9Gamebuino6updateEv + 0x0000000000001bc6 0x176 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001bc6 _ZN9Gamebuino6updateEv .text._ZN9Gamebuino4menuEPKPKch - 0x0000000000001a60 0x29c ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001a60 _ZN9Gamebuino4menuEPKPKch + 0x0000000000001d3c 0x29c ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001d3c _ZN9Gamebuino4menuEPKPKch .text._ZN9Gamebuino10changeGameEv - 0x0000000000001cfc 0x7a ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001cfc _ZN9Gamebuino10changeGameEv + 0x0000000000001fd8 0x7a ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001fd8 _ZN9Gamebuino10changeGameEv .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh - 0x0000000000001d76 0x27c ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001d76 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh + 0x0000000000002052 0x27c ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000002052 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelper - 0x0000000000001ff2 0x8 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001ff2 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper + 0x00000000000022ce 0x8 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022ce _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper .text._ZN9Gamebuino17settingsAvailableEv - 0x0000000000001ffa 0x14 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001ffa _ZN9Gamebuino17settingsAvailableEv + 0x00000000000022d6 0x14 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022d6 _ZN9Gamebuino17settingsAvailableEv .text._ZN9Gamebuino12readSettingsEv - 0x000000000000200e 0xde ../lib/libgamebuino.a(Gamebuino.o) - 0x000000000000200e _ZN9Gamebuino12readSettingsEv + 0x00000000000022ea 0xde ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022ea _ZN9Gamebuino12readSettingsEv .text._ZN9Gamebuino5beginEv - 0x00000000000020ec 0xb6 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000020ec _ZN9Gamebuino5beginEv + 0x00000000000023c8 0xb6 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000023c8 _ZN9Gamebuino5beginEv .text._ZN9Gamebuino14getDefaultNameEPc - 0x00000000000021a2 0x2c ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000021a2 _ZN9Gamebuino14getDefaultNameEPc + 0x000000000000247e 0x2c ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000247e _ZN9Gamebuino14getDefaultNameEPc .text._ZN5Sound7commandEhhah.part.0 - 0x00000000000021ce 0x74 ../lib/libgamebuino.a(Sound.o) + 0x00000000000024aa 0x74 ../lib/libgamebuino.a(Sound.o) .text._ZN5Sound5beginEv - 0x0000000000002242 0x6a ../lib/libgamebuino.a(Sound.o) - 0x0000000000002242 _ZN5Sound5beginEv + 0x000000000000251e 0x6a ../lib/libgamebuino.a(Sound.o) + 0x000000000000251e _ZN5Sound5beginEv .text._ZN5Sound7commandEhhah - 0x00000000000022ac 0x62 ../lib/libgamebuino.a(Sound.o) - 0x00000000000022ac _ZN5Sound7commandEhhah + 0x0000000000002588 0x62 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002588 _ZN5Sound7commandEhhah .text._ZN5Sound8playNoteEhhh - 0x000000000000230e 0x24 ../lib/libgamebuino.a(Sound.o) - 0x000000000000230e _ZN5Sound8playNoteEhhh + 0x00000000000025ea 0x24 ../lib/libgamebuino.a(Sound.o) + 0x00000000000025ea _ZN5Sound8playNoteEhhh .text._ZN5Sound12updateOutputEv - 0x0000000000002332 0x16 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002332 _ZN5Sound12updateOutputEv + 0x000000000000260e 0x16 ../lib/libgamebuino.a(Sound.o) + 0x000000000000260e _ZN5Sound12updateOutputEv .text._ZN5Sound8stopNoteEh - 0x0000000000002348 0x22 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002348 _ZN5Sound8stopNoteEh + 0x0000000000002624 0x22 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002624 _ZN5Sound8stopNoteEh .text._ZN5Sound11stopPatternEh - 0x000000000000236a 0x16 ../lib/libgamebuino.a(Sound.o) - 0x000000000000236a _ZN5Sound11stopPatternEh + 0x0000000000002646 0x16 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002646 _ZN5Sound11stopPatternEh .text._ZN5Sound11playPatternEPKjh - 0x0000000000002380 0x36 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002380 _ZN5Sound11playPatternEPKjh + 0x000000000000265c 0x36 ../lib/libgamebuino.a(Sound.o) + 0x000000000000265c _ZN5Sound11playPatternEPKjh .text._ZN5Sound11updateTrackEh - 0x00000000000023b6 0x72 ../lib/libgamebuino.a(Sound.o) - 0x00000000000023b6 _ZN5Sound11updateTrackEh + 0x0000000000002692 0x72 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002692 _ZN5Sound11updateTrackEh .text._ZN5Sound11updateTrackEv - 0x0000000000002428 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002428 _ZN5Sound11updateTrackEv + 0x0000000000002704 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002704 _ZN5Sound11updateTrackEv .text._ZN5Sound11stopPatternEv - 0x000000000000242e 0x6 ../lib/libgamebuino.a(Sound.o) - 0x000000000000242e _ZN5Sound11stopPatternEv + 0x000000000000270a 0x6 ../lib/libgamebuino.a(Sound.o) + 0x000000000000270a _ZN5Sound11stopPatternEv .text._ZN5Sound13updatePatternEh - 0x0000000000002434 0xcc ../lib/libgamebuino.a(Sound.o) - 0x0000000000002434 _ZN5Sound13updatePatternEh + 0x0000000000002710 0xcc ../lib/libgamebuino.a(Sound.o) + 0x0000000000002710 _ZN5Sound13updatePatternEh .text._ZN5Sound13updatePatternEv - 0x0000000000002500 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002500 _ZN5Sound13updatePatternEv + 0x00000000000027dc 0x6 ../lib/libgamebuino.a(Sound.o) + 0x00000000000027dc _ZN5Sound13updatePatternEv .text._ZN5Sound10updateNoteEh - 0x0000000000002506 0x184 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002506 _ZN5Sound10updateNoteEh + 0x00000000000027e2 0x184 ../lib/libgamebuino.a(Sound.o) + 0x00000000000027e2 _ZN5Sound10updateNoteEh .text._ZN5Sound10updateNoteEv - 0x000000000000268a 0x6 ../lib/libgamebuino.a(Sound.o) - 0x000000000000268a _ZN5Sound10updateNoteEv + 0x0000000000002966 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002966 _ZN5Sound10updateNoteEv .text._ZN5Sound14generateOutputEv - 0x0000000000002690 0x54 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002690 _ZN5Sound14generateOutputEv + 0x000000000000296c 0x54 ../lib/libgamebuino.a(Sound.o) + 0x000000000000296c _ZN5Sound14generateOutputEv .text.__vector_11 - 0x00000000000026e4 0x48 ../lib/libgamebuino.a(Sound.o) - 0x00000000000026e4 __vector_11 + 0x00000000000029c0 0x48 ../lib/libgamebuino.a(Sound.o) + 0x00000000000029c0 __vector_11 .text._ZN5Sound6playOKEv - 0x000000000000272c 0x2c ../lib/libgamebuino.a(Sound.o) - 0x000000000000272c _ZN5Sound6playOKEv + 0x0000000000002a08 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a08 _ZN5Sound6playOKEv .text._ZN5Sound10playCancelEv - 0x0000000000002758 0x2c ../lib/libgamebuino.a(Sound.o) - 0x0000000000002758 _ZN5Sound10playCancelEv + 0x0000000000002a34 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a34 _ZN5Sound10playCancelEv .text._ZN5Sound8playTickEv - 0x0000000000002784 0x2c ../lib/libgamebuino.a(Sound.o) - 0x0000000000002784 _ZN5Sound8playTickEv + 0x0000000000002a60 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a60 _ZN5Sound8playTickEv .text._ZN5Sound9setVolumeEa - 0x00000000000027b0 0x1c ../lib/libgamebuino.a(Sound.o) - 0x00000000000027b0 _ZN5Sound9setVolumeEa + 0x0000000000002a8c 0x1c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a8c _ZN5Sound9setVolumeEa .text._ZN9Backlight5beginEv - 0x00000000000027cc 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027cc _ZN9Backlight5beginEv + 0x0000000000002aa8 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002aa8 _ZN9Backlight5beginEv .text._ZN9Backlight3setEh - 0x00000000000027d4 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027d4 _ZN9Backlight3setEh + 0x0000000000002ab0 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002ab0 _ZN9Backlight3setEh .text._ZN9Backlight6updateEv - 0x00000000000027dc 0xbe ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027dc _ZN9Backlight6updateEv + 0x0000000000002ab8 0xbe ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002ab8 _ZN9Backlight6updateEv .text._ZN7Battery5beginEv - 0x000000000000289a 0x14 ../lib/libgamebuino.a(Battery.o) - 0x000000000000289a _ZN7Battery5beginEv + 0x0000000000002b76 0x14 ../lib/libgamebuino.a(Battery.o) + 0x0000000000002b76 _ZN7Battery5beginEv .text._ZN7Battery6updateEv - 0x00000000000028ae 0x72 ../lib/libgamebuino.a(Battery.o) - 0x00000000000028ae _ZN7Battery6updateEv + 0x0000000000002b8a 0x72 ../lib/libgamebuino.a(Battery.o) + 0x0000000000002b8a _ZN7Battery6updateEv .text.__vector_16 - 0x0000000000002920 0x94 ../lib/libarduino.a(wiring.o) - 0x0000000000002920 __vector_16 - .text.millis 0x00000000000029b4 0x18 ../lib/libarduino.a(wiring.o) - 0x00000000000029b4 millis - .text.micros 0x00000000000029cc 0x4a ../lib/libarduino.a(wiring.o) - 0x00000000000029cc micros - .text.delay 0x0000000000002a16 0x4c ../lib/libarduino.a(wiring.o) - 0x0000000000002a16 delay - .text.init 0x0000000000002a62 0x76 ../lib/libarduino.a(wiring.o) - 0x0000000000002a62 init + 0x0000000000002bfc 0x94 ../lib/libarduino.a(wiring.o) + 0x0000000000002bfc __vector_16 + .text.millis 0x0000000000002c90 0x18 ../lib/libarduino.a(wiring.o) + 0x0000000000002c90 millis + .text.micros 0x0000000000002ca8 0x4a ../lib/libarduino.a(wiring.o) + 0x0000000000002ca8 micros + .text.delay 0x0000000000002cf2 0x4c ../lib/libarduino.a(wiring.o) + 0x0000000000002cf2 delay + .text.init 0x0000000000002d3e 0x76 ../lib/libarduino.a(wiring.o) + 0x0000000000002d3e init .text.analogRead - 0x0000000000002ad8 0x3a ../lib/libarduino.a(wiring_analog.o) - 0x0000000000002ad8 analogRead + 0x0000000000002db4 0x3a ../lib/libarduino.a(wiring_analog.o) + 0x0000000000002db4 analogRead .text.analogWrite - 0x0000000000002b12 0xbe ../lib/libarduino.a(wiring_analog.o) - 0x0000000000002b12 analogWrite + 0x0000000000002dee 0xbe ../lib/libarduino.a(wiring_analog.o) + 0x0000000000002dee analogWrite .text.turnOffPWM - 0x0000000000002bd0 0x52 ../lib/libarduino.a(wiring_digital.o) - .text.pinMode 0x0000000000002c22 0x78 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002c22 pinMode + 0x0000000000002eac 0x52 ../lib/libarduino.a(wiring_digital.o) + .text.pinMode 0x0000000000002efe 0x78 ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002efe pinMode .text.digitalWrite - 0x0000000000002c9a 0x5e ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002c9a digitalWrite + 0x0000000000002f76 0x5e ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002f76 digitalWrite .text.digitalRead - 0x0000000000002cf8 0x52 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002cf8 digitalRead + 0x0000000000002fd4 0x52 ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002fd4 digitalRead .text._ZN5Print5writeEPKhj - 0x0000000000002d4a 0x50 ../lib/libarduino.a(Print.o) - 0x0000000000002d4a _ZN5Print5writeEPKhj + 0x0000000000003026 0x50 ../lib/libarduino.a(Print.o) + 0x0000000000003026 _ZN5Print5writeEPKhj .text._ZN5Print5writeEPKc - 0x0000000000002d9a 0x2a ../lib/libarduino.a(Print.o) - 0x0000000000002d9a _ZN5Print5writeEPKc + 0x0000000000003076 0x2a ../lib/libarduino.a(Print.o) + 0x0000000000003076 _ZN5Print5writeEPKc .text._ZN5Print5printEPK19__FlashStringHelper - 0x0000000000002dc4 0x46 ../lib/libarduino.a(Print.o) - 0x0000000000002dc4 _ZN5Print5printEPK19__FlashStringHelper + 0x00000000000030a0 0x46 ../lib/libarduino.a(Print.o) + 0x00000000000030a0 _ZN5Print5printEPK19__FlashStringHelper .text._ZN5Print5printEc - 0x0000000000002e0a 0xe ../lib/libarduino.a(Print.o) - 0x0000000000002e0a _ZN5Print5printEc + 0x00000000000030e6 0xe ../lib/libarduino.a(Print.o) + 0x00000000000030e6 _ZN5Print5printEc .text._ZN5Print7printlnEv - 0x0000000000002e18 0x28 ../lib/libarduino.a(Print.o) - 0x0000000000002e18 _ZN5Print7printlnEv + 0x00000000000030f4 0x28 ../lib/libarduino.a(Print.o) + 0x00000000000030f4 _ZN5Print7printlnEv .text._ZN5Print7printlnEPK19__FlashStringHelper - 0x0000000000002e40 0x24 ../lib/libarduino.a(Print.o) - 0x0000000000002e40 _ZN5Print7printlnEPK19__FlashStringHelper + 0x000000000000311c 0x24 ../lib/libarduino.a(Print.o) + 0x000000000000311c _ZN5Print7printlnEPK19__FlashStringHelper .text._ZN5Print11printNumberEmh - 0x0000000000002e64 0xac ../lib/libarduino.a(Print.o) - 0x0000000000002e64 _ZN5Print11printNumberEmh + 0x0000000000003140 0xac ../lib/libarduino.a(Print.o) + 0x0000000000003140 _ZN5Print11printNumberEmh .text._ZN5Print5printEmi - 0x0000000000002f10 0x1a ../lib/libarduino.a(Print.o) - 0x0000000000002f10 _ZN5Print5printEmi + 0x00000000000031ec 0x1a ../lib/libarduino.a(Print.o) + 0x00000000000031ec _ZN5Print5printEmi .text._ZN5Print5printEji - 0x0000000000002f2a 0xc ../lib/libarduino.a(Print.o) - 0x0000000000002f2a _ZN5Print5printEji + 0x0000000000003206 0xc ../lib/libarduino.a(Print.o) + 0x0000000000003206 _ZN5Print5printEji .text._ZN5Print5printEli - 0x0000000000002f36 0x90 ../lib/libarduino.a(Print.o) - 0x0000000000002f36 _ZN5Print5printEli + 0x0000000000003212 0x90 ../lib/libarduino.a(Print.o) + 0x0000000000003212 _ZN5Print5printEli .text._ZN5Print5printEii - 0x0000000000002fc6 0xe ../lib/libarduino.a(Print.o) - 0x0000000000002fc6 _ZN5Print5printEii + 0x00000000000032a2 0xe ../lib/libarduino.a(Print.o) + 0x00000000000032a2 _ZN5Print5printEii .text._Z3maplllll - 0x0000000000002fd4 0x82 ../lib/libarduino.a(WMath.o) - 0x0000000000002fd4 _Z3maplllll + 0x00000000000032b0 0x82 ../lib/libarduino.a(WMath.o) + 0x00000000000032b0 _Z3maplllll .text.__cxa_pure_virtual - 0x0000000000003056 0x2 ../lib/libarduino.a(forward.o) - 0x0000000000003056 __cxa_pure_virtual + 0x0000000000003332 0x2 ../lib/libarduino.a(forward.o) + 0x0000000000003332 __cxa_pure_virtual .text._ZN8SPIClass5beginEv - 0x0000000000003058 0x2c ../lib/libarduino.a(SPI.o) - 0x0000000000003058 _ZN8SPIClass5beginEv + 0x0000000000003334 0x2c ../lib/libarduino.a(SPI.o) + 0x0000000000003334 _ZN8SPIClass5beginEv .text._ZN8SPIClass11setBitOrderEh - 0x0000000000003084 0x12 ../lib/libarduino.a(SPI.o) - 0x0000000000003084 _ZN8SPIClass11setBitOrderEh + 0x0000000000003360 0x12 ../lib/libarduino.a(SPI.o) + 0x0000000000003360 _ZN8SPIClass11setBitOrderEh .text._ZN8SPIClass11setDataModeEh - 0x0000000000003096 0xa ../lib/libarduino.a(SPI.o) - 0x0000000000003096 _ZN8SPIClass11setDataModeEh + 0x0000000000003372 0xa ../lib/libarduino.a(SPI.o) + 0x0000000000003372 _ZN8SPIClass11setDataModeEh .text._ZN8SPIClass15setClockDividerEh - 0x00000000000030a0 0x1e ../lib/libarduino.a(SPI.o) - 0x00000000000030a0 _ZN8SPIClass15setClockDividerEh + 0x000000000000337c 0x1e ../lib/libarduino.a(SPI.o) + 0x000000000000337c _ZN8SPIClass15setClockDividerEh .text.libgcc.mul - 0x00000000000030be 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - 0x00000000000030be __mulsi3 + 0x000000000000339a 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x000000000000339a __mulsi3 .text.libgcc.div - 0x00000000000030de 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodqi4.o) - 0x00000000000030de __udivmodqi4 + 0x00000000000033ba 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodqi4.o) + 0x00000000000033ba __udivmodqi4 .text.libgcc.div - 0x00000000000030f6 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - 0x00000000000030f6 __udivmodhi4 + 0x00000000000033d2 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x00000000000033d2 __udivmodhi4 .text.libgcc.div - 0x000000000000311e 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - 0x000000000000311e __divmodhi4 - 0x000000000000311e _div + 0x00000000000033fa 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000033fa __divmodhi4 + 0x00000000000033fa _div .text.libgcc.div - 0x0000000000003146 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - 0x0000000000003146 __udivmodsi4 + 0x0000000000003422 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x0000000000003422 __udivmodsi4 .text.libgcc.div - 0x000000000000318a 0x2e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodsi4.o) - 0x000000000000318a __divmodsi4 + 0x0000000000003466 0x2e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodsi4.o) + 0x0000000000003466 __divmodsi4 .text.libgcc.div - 0x00000000000031b8 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_negsi2.o) - 0x00000000000031b8 __negsi2 + 0x0000000000003494 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_negsi2.o) + 0x0000000000003494 __negsi2 .text.libgcc.mul - 0x00000000000031c8 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - 0x00000000000031c8 __muluhisi3 - .text.libgcc 0x00000000000031de 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - 0x00000000000031de __tablejump2__ + 0x00000000000034a4 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x00000000000034a4 __muluhisi3 + .text.libgcc 0x00000000000034ba 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000034ba __tablejump2__ .text.libgcc.mul - 0x00000000000031ea 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - 0x00000000000031ea __umulhisi3 + 0x00000000000034c6 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x00000000000034c6 __umulhisi3 .text.avr-libc.fplib - 0x0000000000003208 0x5e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fixunssfsi.o) - 0x0000000000003208 __fixunssfsi + 0x00000000000034e4 0x5e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fixunssfsi.o) + 0x00000000000034e4 __fixunssfsi .text.avr-libc.fplib - 0x0000000000003266 0x7a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(floatsisf.o) - 0x0000000000003266 __floatunsisf - 0x000000000000326a __floatsisf + 0x0000000000003542 0x7a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(floatsisf.o) + 0x0000000000003542 __floatunsisf + 0x0000000000003546 __floatsisf .text.avr-libc.fplib - 0x00000000000032e0 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_inf.o) - 0x00000000000032e0 __fp_inf + 0x00000000000035bc 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_inf.o) + 0x00000000000035bc __fp_inf .text.avr-libc.fplib - 0x00000000000032ec 0x6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_nan.o) - 0x00000000000032ec __fp_nan + 0x00000000000035c8 0x6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_nan.o) + 0x00000000000035c8 __fp_nan .text.avr-libc.fplib - 0x00000000000032f2 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscA.o) - 0x00000000000032f2 __fp_pscA + 0x00000000000035ce 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscA.o) + 0x00000000000035ce __fp_pscA .text.avr-libc.fplib - 0x0000000000003300 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscB.o) - 0x0000000000003300 __fp_pscB + 0x00000000000035dc 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscB.o) + 0x00000000000035dc __fp_pscB .text.avr-libc.fplib - 0x000000000000330e 0x22 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_round.o) - 0x000000000000330e __fp_round + 0x00000000000035ea 0x22 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_round.o) + 0x00000000000035ea __fp_round .text.avr-libc.fplib - 0x0000000000003330 0x44 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_split3.o) - 0x0000000000003330 __fp_split3 - 0x0000000000003340 __fp_splitA + 0x000000000000360c 0x44 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_split3.o) + 0x000000000000360c __fp_split3 + 0x000000000000361c __fp_splitA .text.avr-libc.fplib - 0x0000000000003374 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_zero.o) - 0x0000000000003374 __fp_zero - 0x0000000000003376 __fp_szero + 0x0000000000003650 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_zero.o) + 0x0000000000003650 __fp_zero + 0x0000000000003652 __fp_szero .text.avr-libc.fplib - 0x0000000000003382 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3.o) - 0x0000000000003382 __mulsf3 + 0x000000000000365e 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3.o) + 0x000000000000365e __mulsf3 .text.avr-libc.fplib - 0x000000000000338a 0xd2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3x.o) - 0x00000000000033a8 __mulsf3x - 0x00000000000033ae __mulsf3_pse + 0x0000000000003666 0xd2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3x.o) + 0x0000000000003684 __mulsf3x + 0x000000000000368a __mulsf3_pse .text.avr-libc - 0x000000000000345c 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - 0x000000000000345c memset + 0x0000000000003738 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) + 0x0000000000003738 memset .text.avr-libc - 0x000000000000346a 0x1e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - 0x000000000000346a strncpy - 0x0000000000003488 . = ALIGN (0x2) + 0x0000000000003746 0x1e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) + 0x0000000000003746 strncpy + 0x0000000000003764 . = ALIGN (0x2) *(.fini9) - .fini9 0x0000000000003488 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - 0x0000000000003488 exit - 0x0000000000003488 _exit + .fini9 0x0000000000003764 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x0000000000003764 exit + 0x0000000000003764 _exit *(.fini9) *(.fini8) *(.fini8) @@ -1756,11 +1810,11 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000003488 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .fini0 0x0000000000003764 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) *(.fini0) - 0x000000000000348c _etext = . + 0x0000000000003768 _etext = . -.data 0x0000000000800100 0x58 load address 0x000000000000348c +.data 0x0000000000800100 0x74 load address 0x0000000000003768 0x0000000000800100 PROVIDE (__data_start, .) *(.data) *(.data*) @@ -1772,74 +1826,76 @@ END GROUP *(.rodata) .rodata 0x0000000000800102 0x3 Obj/Unit.o *(.rodata*) - .rodata._ZZN11HumanPlayer13buttonHandlerEvE23apBtnCameraHandlerTable - 0x0000000000800105 0x1c Obj/HumanPlayer.o - .rodata._ZZN11HumanPlayer13buttonHandlerEvE17apBtnHandlerTable - 0x0000000000800121 0x1c Obj/HumanPlayer.o .rodata._ZTV11HumanPlayer - 0x000000000080013d 0x6 Obj/HumanPlayer.o - 0x000000000080013d _ZTV11HumanPlayer + 0x0000000000800105 0x6 Obj/HumanPlayer.o + 0x0000000000800105 _ZTV11HumanPlayer .rodata._ZTV6Player - 0x0000000000800143 0x6 Obj/Player.o - 0x0000000000800143 _ZTV6Player + 0x000000000080010b 0x6 Obj/Player.o + 0x000000000080010b _ZTV6Player + .rodata._ZZN11HumanPlayer27playerButtonReleasedHandlerEjE17apBtnHandlerTable + 0x0000000000800111 0x1c Obj/HumanPlayerBtn.o + .rodata._ZZN11HumanPlayer26cameraButtonPressedHandlerEjE23apBtnCameraHandlerTable + 0x000000000080012d 0x1c Obj/HumanPlayerBtn.o + .rodata._ZZN11HumanPlayer26playerButtonPressedHandlerEjE17apBtnHandlerTable + 0x0000000000800149 0x1c Obj/HumanPlayerBtn.o .rodata._ZTV7Display - 0x0000000000800149 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000800149 _ZTV7Display + 0x0000000000800165 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000800165 _ZTV7Display .rodata.str1.1 - 0x0000000000800151 0x7 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000080016d 0x7 ../lib/libgamebuino.a(Gamebuino.o) *(.gnu.linkonce.d*) - 0x0000000000800158 . = ALIGN (0x2) - 0x0000000000800158 _edata = . - 0x0000000000800158 PROVIDE (__data_end, .) + 0x0000000000800174 . = ALIGN (0x2) + 0x0000000000800174 _edata = . + 0x0000000000800174 PROVIDE (__data_end, .) -.bss 0x0000000000800158 0x298 - 0x0000000000800158 PROVIDE (__bss_start, .) +.bss 0x0000000000800174 0x298 + 0x0000000000800174 PROVIDE (__bss_start, .) *(.bss) *(.bss*) - .bss.gb 0x0000000000800158 0x87 Obj/System.o - 0x0000000000800158 gb - .bss._cam 0x00000000008001df 0x2 Obj/Sprite.o - 0x00000000008001df _cam + .bss.gb 0x0000000000800174 0x87 Obj/System.o + 0x0000000000800174 gb + .bss._cam 0x00000000008001fb 0x2 Obj/Sprite.o + 0x00000000008001fb _cam .bss._displayBuffer - 0x00000000008001e1 0x200 ../lib/libgamebuino.a(Display.o) - 0x00000000008001e1 _displayBuffer + 0x00000000008001fd 0x200 ../lib/libgamebuino.a(Display.o) + 0x00000000008001fd _displayBuffer .bss._chanNoise - 0x00000000008003e1 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e1 _chanNoise + 0x00000000008003fd 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003fd _chanNoise .bss._chanOutput - 0x00000000008003e2 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e2 _chanOutput + 0x00000000008003fe 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003fe _chanOutput .bss._chanOutputVolume - 0x00000000008003e3 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e3 _chanOutputVolume + 0x00000000008003ff 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003ff _chanOutputVolume .bss._chanHalfPeriod - 0x00000000008003e4 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e4 _chanHalfPeriod + 0x0000000000800400 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800400 _chanHalfPeriod .bss._chanState - 0x00000000008003e5 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e5 _chanState + 0x0000000000800401 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800401 _chanState .bss._chanCount - 0x00000000008003e6 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e6 _chanCount + 0x0000000000800402 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800402 _chanCount .bss.timer0_fract - 0x00000000008003e7 0x1 ../lib/libarduino.a(wiring.o) + 0x0000000000800403 0x1 ../lib/libarduino.a(wiring.o) .bss.timer0_millis - 0x00000000008003e8 0x4 ../lib/libarduino.a(wiring.o) - 0x00000000008003e8 timer0_millis + 0x0000000000800404 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800404 timer0_millis .bss.timer0_overflow_count - 0x00000000008003ec 0x4 ../lib/libarduino.a(wiring.o) - 0x00000000008003ec timer0_overflow_count + 0x0000000000800408 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800408 timer0_overflow_count *(COMMON) - 0x00000000008003f0 PROVIDE (__bss_end, .) - 0x000000000000348c __data_load_start = LOADADDR (.data) - 0x00000000000034e4 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x000000000080040c PROVIDE (__bss_end, .) + 0x0000000000003768 __data_load_start = LOADADDR (.data) + 0x00000000000037dc __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00000000008003f0 0x0 +.noinit 0x000000000080040c 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00000000008003f0 _end = . - 0x00000000008003f0 PROVIDE (__heap_start, .) + 0x000000000080040c _end = . + 0x000000000080040c PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1891,6 +1947,8 @@ END GROUP .comment 0x0000000000000011 0x12 Obj/BaseUnit.o .comment 0x0000000000000011 0x12 Obj/Unit.o .comment 0x0000000000000011 0x12 Obj/Menu.o + .comment 0x0000000000000011 0x12 Obj/Cursor.o + .comment 0x0000000000000011 0x12 Obj/HumanPlayerBtn.o .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(Buttons.o) .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(Display.o) .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(font3x5.o) diff --git a/Game.cpp b/Game.cpp index e4c0438..5a3f833 100644 --- a/Game.cpp +++ b/Game.cpp @@ -67,7 +67,7 @@ void Game(const struct tGameConfig& sGameConfig) /* Do not calculate a new frame * until refresh flag is set. */ - while (gb.update() == false); + while (not gb.update()); } while (GamePause() != PAUSE_MENU_CHOICE_QUIT); } @@ -82,19 +82,20 @@ void Game(const struct tGameConfig& sGameConfig) *********************************************************************/ static void GameNextFrame(const struct tGameConfig& sGameConfig) { - for (uint8_t i = 0; i < sGameConfig.u8NHumanPlayers; i++) + for (size_t szHumanPlayer = 0; szHumanPlayer < sGameConfig.u8NHumanPlayers; szHumanPlayer++) { - HumanPlayer* pHumanPlayerData = &sGameConfig.pHumanPlayerData[i]; + HumanPlayer* const pHumanPlayerData = &sGameConfig.pHumanPlayerData[szHumanPlayer]; if (pHumanPlayerData != NULL) { + /* Execute handler for selected HumanPlayer. */ pHumanPlayerData->handler(); } + else + { + /* HumanPlayer handler callback not available. */ + } } - - /* Update camera position according - * to button pressed events. */ - sGameConfig.cam.handler(); } /*****************************************************************//** @@ -118,7 +119,7 @@ static enum tPauseMenuChoice GamePause(void) [PAUSE_MENU_CHOICE_QUIT] = strPauseMenuOption_1 }; - return (enum tPauseMenuChoice)gb.menu(astrPauseMenuOptions, MAX_PAUSE_MENU_CHOICES); + return static_cast(gb.menu(astrPauseMenuOptions, MAX_PAUSE_MENU_CHOICES)); } else { diff --git a/HumanPlayer.cpp b/HumanPlayer.cpp index e83d4e6..d13bc6b 100644 --- a/HumanPlayer.cpp +++ b/HumanPlayer.cpp @@ -4,8 +4,12 @@ #include "HumanPlayer.h" #include "System.h" +#include "Sprite.h" +#include "Cursor.h" #include #include +#include +#include /* ******************************************************************* * Defines @@ -23,6 +27,25 @@ * Local variables definition * ******************************************************************/ +/*****************************************************************//** + * + * \brief Bitmap data for idle UNIT_ID_PEASANT. + * + *********************************************************************/ +static const PROGMEM uint8_t au8MouseSprData[] = +{ + 8, + 8, + 0xFC, + 0x84, + 0x88, + 0x84, + 0xA2, + 0xD1, + 0x0A, + 0x04 +}; + /* ******************************************************************* * Local prototypes declaration * ******************************************************************/ @@ -38,7 +61,9 @@ *********************************************************************/ HumanPlayer::HumanPlayer(const char* const strPlayerName, const Camera& cam) : Player(strPlayerName), -_cam(cam) +_cam(cam), +_ABtnFrames(0), +_eState(PLAYER_STATE_IDLE) { _unitsMap[0].create(Unit::UNIT_ID_PEASANT, 16, 16); } @@ -50,107 +75,13 @@ _cam(cam) *********************************************************************/ void HumanPlayer::handler(void) { - this->buttonHandler(); + /* Execute HumanPlayerBtn submodule. */ + buttonHandler(); - for (uint8_t i = 0; i < MAX_UNITS; i++) - { - Unit& unit = _unitsMap[i]; + /* Execute parent class unit handler. */ + Player::handleUnits(); - unit.handler(); - } -} - -/*****************************************************************//** - * - * \brief Event handler executed when human player presses - * left arrow button. - * - *********************************************************************/ -void HumanPlayer::buttonHandler(void) -{ - for (uint8_t u8Btn = 0; u8Btn < NUM_BTN; u8Btn++) - { - /* This array of member functions lists - * button pressed event handlers for each button. */ - static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = - { - [BTN_LEFT] = NULL, - [BTN_UP] = NULL, - [BTN_RIGHT] = NULL, - [BTN_DOWN] = NULL, - [BTN_A] = &HumanPlayer::onABtnPressed, - [BTN_B] = &HumanPlayer::onBBtnPressed - }; - - static void (Camera::*const apBtnCameraHandlerTable[NUM_BTN])(void) = - { - [BTN_LEFT] = &Camera::onLeftBtnPressed, - [BTN_UP] = &Camera::onUpBtnPressed, - [BTN_RIGHT] = &Camera::onRightBtnPressed, - [BTN_DOWN] = &Camera::onDownBtnPressed - }; - - if (gb.buttons.timeHeld(u8Btn) > 0) - { - /* Key has been pressed. Execute both - * HumanPlayer and Camera handlers, if available. */ - - /* Get pointer to HumanPlayer member function for selected button. */ - void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[u8Btn]; - - if (pBtnHandler != NULL) - { - /* HumanPlayer member function - * pointer is available. Execute. */ - (this->*pBtnHandler)(); - } - else - { - /* Undefined callback for selected button. */ - } - - /* Get pointer to Camera member function for selected button. */ - void (Camera::*const pCameraBtnHandler)(void) = apBtnCameraHandlerTable[u8Btn]; - - if (pCameraBtnHandler != NULL) - { - /* Camera member function pointer - * is available. - * Note: "const" qualifier must be - * removed since camera button event - * handler modifies Camera class members. */ - ((Camera&)_cam.*pCameraBtnHandler)(); - } - else - { - /* Undefined callback for selected button. */ - } - } - else - { - /* Key has not been pressed. Exit. */ - } - } -} - -/*****************************************************************//** - * - * \brief Event handler executed when human player presses - * A button. - * - *********************************************************************/ -void HumanPlayer::onABtnPressed(void) -{ -} - -/*****************************************************************//** - * - * \brief Event handler executed when human player presses - * B button. - * - *********************************************************************/ -void HumanPlayer::onBBtnPressed(void) -{ + drawHandler(); } /*****************************************************************//** @@ -159,5 +90,37 @@ void HumanPlayer::onBBtnPressed(void) * *********************************************************************/ void HumanPlayer::drawHandler(void) +{ + /* Execute base class Unit drawHandler. */ + Player::drawUnits(); + + if (_eState == PLAYER_STATE_UNIT_MENU) + { + gb.display.setColor(BLACK); + gb.display.drawRect(0, 40, 84, 8); + } + + /* Configure cursor sprite object. */ + Sprite cursorSpr(au8MouseSprData, false, INVERT); + + /* Transfer Cursor to Sprite coordinates. */ + cursorSpr.setPos(_cursor.getX(), _cursor.getY()); + + /* Draw cursor sprite. */ + cursorSpr.draw(); +} + +/*****************************************************************//** + * + * \brief This function looks for units nearby and selects them. + * If no units can be selected, player state remains + * unchanged. + * + * \return New player state. + * + * \see \ref tPlayerState. + * + *********************************************************************/ +enum tPlayerState HumanPlayer::selectUnit(void) { } diff --git a/HumanPlayer.h b/HumanPlayer.h index 8a6e598..262dde8 100644 --- a/HumanPlayer.h +++ b/HumanPlayer.h @@ -7,6 +7,8 @@ #include "Player.h" #include "Camera.h" +#include "Cursor.h" +#include /* ************************************** * Defines * @@ -27,13 +29,37 @@ class HumanPlayer : public Player void handler(void); private: - const Camera& _cam; - void buttonHandler(void); + enum tPlayerState + { + PLAYER_STATE_IDLE, /**< Player has not entered any menu or unit. */ + PLAYER_STATE_UNIT_MENU, /**< Player has opened Unit menu. */ + PLAYER_STATE_UNIT_SELECTED /**< Player has selected one or more units. */ + } _eState; /**< Player action state. */ + void drawHandler(void); - /* Event handlers. */ + /* Button handlers. */ + void buttonHandler(void); + void playerButtonPressedHandler(const size_t szBtn); + void cameraButtonPressedHandler(const size_t szBtn); + void playerButtonReleasedHandler(const size_t szBtn); + + /* Pressed button event handlers. */ void onABtnPressed(void); void onBBtnPressed(void); + + /* Released button event handlers. */ + void onABtnReleased(void); + + /* Unit selection. */ + enum tPlayerState selectUnit(void); + + /* Private objects. */ + const Camera& _cam; + Cursor _cursor; + + /* Private variables. */ + uint8_t _ABtnFrames; }; #endif /* HUMAN_PLAYER_H__ */ diff --git a/HumanPlayerBtn.cpp b/HumanPlayerBtn.cpp new file mode 100644 index 0000000..a21962e --- /dev/null +++ b/HumanPlayerBtn.cpp @@ -0,0 +1,272 @@ +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include "HumanPlayer.h" +#include "System.h" +#include "Cursor.h" +#include +#include +#include +#include +#include + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +/* ******************************************************************* + * Types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local prototypes declaration + * ******************************************************************/ + +/* ******************************************************************* + * Functions definition + * ******************************************************************/ + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * left arrow button. + * + *********************************************************************/ +void HumanPlayer::buttonHandler(void) +{ + for (size_t szBtn = 0; szBtn < NUM_BTN; szBtn++) + { + if (gb.buttons.timeHeld(static_cast(szBtn)) > 0) + { + /* Update player attributes + * according to pressed button. */ + playerButtonPressedHandler(szBtn); + + /* Update camera attributes + * according to pressed button. */ + cameraButtonPressedHandler(szBtn); + } + else + { + /* Key has not been pressed. */ + + /* Update player attributes + * according to released button. */ + playerButtonReleasedHandler(szBtn); + } + } +} + +/*****************************************************************//** + * + * \brief This function executes button pressed handler events + * used on a \ref HumanPlayer object. + * + * \param szBtn + * Pressed button ID. + * + *********************************************************************/ +void HumanPlayer::playerButtonPressedHandler(const size_t szBtn) +{ + /* This array of member functions lists + * button pressed event handlers for each button. */ + static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = + { + [BTN_LEFT] = NULL, + [BTN_UP] = NULL, + [BTN_RIGHT] = NULL, + [BTN_DOWN] = NULL, + [BTN_A] = &HumanPlayer::onABtnPressed, + [BTN_B] = &HumanPlayer::onBBtnPressed + }; + + /* Key has been pressed. Execute both + * HumanPlayer and Camera handlers, if available. */ + + /* Get pointer to HumanPlayer member function for selected button. */ + void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[szBtn]; + + if (pBtnHandler != NULL) + { + /* HumanPlayer member function + * pointer is available. Execute. */ + (this->*pBtnHandler)(); + } + else + { + /* Undefined callback for selected button. */ + } +} + +/*****************************************************************//** + * + * \brief This function executes button pressed handler events + * used on a \ref Camera object. + * + * \param szBtn + * Pressed button ID. + * + *********************************************************************/ +void HumanPlayer::cameraButtonPressedHandler(const size_t szBtn) +{ + if (not _cam.isLocked()) + { + static void (Camera::*const apBtnCameraHandlerTable[NUM_BTN])(Cursor&) = + { + [BTN_LEFT] = &Camera::onLeftBtnPressed, + [BTN_UP] = &Camera::onUpBtnPressed, + [BTN_RIGHT] = &Camera::onRightBtnPressed, + [BTN_DOWN] = &Camera::onDownBtnPressed + }; + + /* Get pointer to Camera member function for selected button. */ + void (Camera::*const pCameraBtnHandler)(Cursor&) = apBtnCameraHandlerTable[szBtn]; + + if (pCameraBtnHandler != NULL) + { + /* Camera member function pointer + * is available. + * Note: "const" qualifier must be + * removed since camera button event + * handler modifies Camera class members. */ + ((Camera&)_cam.*pCameraBtnHandler)(_cursor); + } + else + { + /* Undefined callback for selected button. */ + } + } +} + +/*****************************************************************//** + * + * \brief This function executes button released handler events + * used on a \ref HumanPlayer object. + * + * \param szBtn + * Released button ID. + * + *********************************************************************/ +void HumanPlayer::playerButtonReleasedHandler(const size_t szBtn) +{ + /* This array of member functions lists + * button pressed event handlers for each button. */ + static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = + { + [BTN_LEFT] = NULL, + [BTN_UP] = NULL, + [BTN_RIGHT] = NULL, + [BTN_DOWN] = NULL, + [BTN_A] = &HumanPlayer::onABtnReleased + }; + + /* Key has been pressed. Execute both + * HumanPlayer and Camera handlers, if available. */ + + /* Get pointer to HumanPlayer member function for selected button. */ + void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[szBtn]; + + if (pBtnHandler != NULL) + { + /* HumanPlayer member function + * pointer is available. Execute. */ + (this->*pBtnHandler)(); + } + else + { + /* Undefined callback for selected button. */ + } +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * A button. + * + *********************************************************************/ +void HumanPlayer::onABtnPressed(void) +{ + switch (_eState) + { + case PLAYER_STATE_IDLE: + + /* Select nearest unit, if possible. */ + _eState = selectUnit(); + break; + + case PLAYER_STATE_UNIT_SELECTED: + + if (_ABtnFrames < UCHAR_MAX) + { + /* Increase number of frames + * A button has been pressed. */ + _ABtnFrames++; + } + + break; + + default: + /* Undefined player state. Exit. */ + break; + } +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * B button. + * + *********************************************************************/ +void HumanPlayer::onBBtnPressed(void) +{ +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player releases + * A button. + * + *********************************************************************/ +void HumanPlayer::onABtnReleased(void) +{ + switch (_eState) + { + case PLAYER_STATE_UNIT_SELECTED: + { + enum + { + /* Number of frames where A button + * must be pressed in order to enter + * unit menu. */ + ENTER_MENU_FRAMES = 5 + }; + + if (_ABtnFrames >= ENTER_MENU_FRAMES) + { + /* Enable unit menu. */ + _eState = PLAYER_STATE_UNIT_MENU; + } + else + { + /* Short button press. Exit. */ + } + } + break; + + default: + /* Undefined state. Exit. */ + break; + } + + /* Reset pressed A button frames counter. */ + _ABtnFrames = 0; +} diff --git a/Makefile b/Makefile index 98922d9..97bd08d 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,9 @@ CXX_FLAGS = $(CC_FLAGS) -std=c++11 OBJ_DIR = Obj SRC_DIR = . -OBJECTS=$(addprefix $(OBJ_DIR)/,main.o Game.o System.o HumanPlayer.o Sprite.o \ - Player.o Camera.o BaseUnit.o Unit.o Menu.o ) +OBJECTS=$(addprefix $(OBJ_DIR)/,main.o Game.o System.o HumanPlayer.o Sprite.o \ + Player.o Camera.o BaseUnit.o Unit.o Menu.o \ + Cursor.o HumanPlayerBtn.o) DEPS = $(OBJECTS:.o=.d) diff --git a/Menu.cpp b/Menu.cpp index 25c40aa..76c821b 100644 --- a/Menu.cpp +++ b/Menu.cpp @@ -32,6 +32,8 @@ * Local prototypes declaration * ******************************************************************/ +static void MainMenuSinglePlayer(void); + /* ******************************************************************* * Functions definition * ******************************************************************/ @@ -75,38 +77,7 @@ void MainMenu(void) switch (gb.menu(astrMainMenuOptions, MAX_CHOICES)) { case CHOICE_SINGLE_PLAYER_GAME: - { - enum - { - /* Maximum number of characters for - * player name, as specified on - * Gamebuino documentation. */ - GAMEBUINO_MAX_PLAYER_NAME = 10 - }; - - Camera cam; - - char strName[GAMEBUINO_MAX_PLAYER_NAME] = {0}; - - /* Fill strName with default user name. */ - gb.getDefaultName(strName); - - /* Declare 1 human player instance. */ - HumanPlayer h(strName, cam); - - const struct tGameConfig c = - { - .pHumanPlayerData = &h, - .u8NHumanPlayers = 1, - .cam = cam - }; - - /* Set global camera for sprites. */ - Sprite::setCamera(&c.cam); - - /* Initialize game with defined configuration. */ - Game(c); - } + MainMenuSinglePlayer(); break; case CHOICE_MULTI_PLAYER_GAME: @@ -118,3 +89,42 @@ void MainMenu(void) break; } } + +/*****************************************************************//** + * + * \brief Executes single player mode. + * + *********************************************************************/ +static void MainMenuSinglePlayer(void) +{ + enum + { + /* Maximum number of characters for + * player name, as specified on + * Gamebuino documentation. */ + GAMEBUINO_MAX_PLAYER_NAME = 10 + }; + + char strName[GAMEBUINO_MAX_PLAYER_NAME] = {0}; + + /* Fill strName with default user name. */ + gb.getDefaultName(strName); + + Camera cam; + + /* Declare 1 human player instance. */ + HumanPlayer h(strName, cam); + + const struct tGameConfig c = + { + .pHumanPlayerData = &h, + .u8NHumanPlayers = 1, + .cam = cam + }; + + /* Set global camera for sprites. */ + Sprite::setCamera(&c.cam); + + /* Initialize game with defined configuration. */ + Game(c); +} diff --git a/Player.cpp b/Player.cpp index e8c6e86..19d581d 100644 --- a/Player.cpp +++ b/Player.cpp @@ -3,6 +3,7 @@ * ******************************************************************/ #include "Player.h" +#include "Unit.h" #include /* ******************************************************************* @@ -54,3 +55,27 @@ _name{'\0'} /* Set all resources to default value. */ memset(_resourcesMap, DEFAULT_RESOURCES, sizeof(uint8_t) * MAX_RESOURCE_TYPES); } + +void Player::handleUnits(void) +{ + for (size_t szUnit = 0; szUnit < MAX_UNITS; szUnit++) + { + /* Select Unit object from internal table. */ + Unit& unit = _unitsMap[szUnit]; + + /* Execute unit handler. */ + unit.handler(); + } +} + +void Player::drawUnits(void) +{ + for (size_t szUnit = 0; szUnit < MAX_UNITS; szUnit++) + { + /* Select Unit object from internal table. */ + Unit& u = _unitsMap[szUnit]; + + /* Execute drawHandler for selected Unit. */ + u.drawHandler(); + } +} diff --git a/Player.h b/Player.h index b0a91c7..29080e1 100644 --- a/Player.h +++ b/Player.h @@ -44,6 +44,8 @@ class Player MAX_UNITS = 32 }; + void handleUnits(void); + void drawUnits(void); uint16_t _resourcesMap[MAX_RESOURCE_TYPES]; char _name[MAX_NAME_LENGTH]; Unit _unitsMap[MAX_UNITS]; diff --git a/PocketEmpires.geany b/PocketEmpires.geany index 5f2b61f..89d5168 100644 --- a/PocketEmpires.geany +++ b/PocketEmpires.geany @@ -28,46 +28,45 @@ long_line_behaviour=1 long_line_column=120 [files] -current_page=17 -FILE_NAME_0=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGfx.cpp;0;4 -FILE_NAME_1=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2Fmain.cpp;0;4 -FILE_NAME_2=3528;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.cpp;0;4 -FILE_NAME_3=549;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.cpp;0;4 -FILE_NAME_4=987;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.h;0;4 -FILE_NAME_5=665;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGfx.h;0;4 -FILE_NAME_6=314;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGlobal_Inc.h;0;4 -FILE_NAME_7=299;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.h;0;4 -FILE_NAME_8=611;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.h;0;4 -FILE_NAME_9=1191;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.h;0;4 -FILE_NAME_10=412;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMakefile;0;4 -FILE_NAME_11=2168;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.cpp;0;4 -FILE_NAME_12=789;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.h;0;4 -FILE_NAME_13=3100;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.cpp;0;4 -FILE_NAME_14=1460;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.cpp;0;4 -FILE_NAME_15=3119;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.cpp;0;4 -FILE_NAME_16=571;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.h;0;4 -FILE_NAME_17=1886;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.cpp;0;4 -FILE_NAME_18=281;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCameraOld.c;0;4 -FILE_NAME_19=768;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.h;0;4 -FILE_NAME_20=2844;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.cpp;0;4 -FILE_NAME_21=818;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.h;0;4 -FILE_NAME_22=5650;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.h;0;4 -FILE_NAME_23=14993;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.cpp;0;4 -FILE_NAME_24=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.h;0;4 -FILE_NAME_25=3497;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.cpp;0;4 -FILE_NAME_26=1135;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.h;0;4 -FILE_NAME_27=3441;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2Fsettings.c;0;4 -FILE_NAME_28=19868;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.cpp;0;4 -FILE_NAME_29=1853;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.cpp;0;4 -FILE_NAME_30=1182;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.h;0;4 -FILE_NAME_31=1373;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.h;0;4 -FILE_NAME_32=2363;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.cpp;0;4 -FILE_NAME_33=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBarracksSpr.i;0;4 -FILE_NAME_34=937;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMouseSpr.i;0;4 -FILE_NAME_35=225;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPeasantSpr.i;0;4 -FILE_NAME_36=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSoldierSpr.i;0;4 -FILE_NAME_37=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTowerSpr.i;0;4 -FILE_NAME_38=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTownCentre.i;0;4 +current_page=37 +FILE_NAME_0=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2Fmain.cpp;0;4 +FILE_NAME_1=3821;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.cpp;0;4 +FILE_NAME_2=549;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.cpp;0;4 +FILE_NAME_3=136;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.h;0;4 +FILE_NAME_4=299;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.h;0;4 +FILE_NAME_5=611;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.h;0;4 +FILE_NAME_6=1102;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.h;0;4 +FILE_NAME_7=453;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMakefile;0;4 +FILE_NAME_8=2168;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.cpp;0;4 +FILE_NAME_9=1739;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.h;0;4 +FILE_NAME_10=1827;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.cpp;0;4 +FILE_NAME_11=2960;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.cpp;0;4 +FILE_NAME_12=571;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.h;0;4 +FILE_NAME_13=2317;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.cpp;0;4 +FILE_NAME_14=1129;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.h;0;4 +FILE_NAME_15=1743;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.cpp;0;4 +FILE_NAME_16=575;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.h;0;4 +FILE_NAME_17=2863;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.h;0;4 +FILE_NAME_18=7987;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.cpp;0;4 +FILE_NAME_19=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.h;0;4 +FILE_NAME_20=3497;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.cpp;0;4 +FILE_NAME_21=1135;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.h;0;4 +FILE_NAME_22=3441;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2Fsettings.c;0;4 +FILE_NAME_23=19868;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.cpp;0;4 +FILE_NAME_24=1492;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.cpp;0;4 +FILE_NAME_25=1230;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.h;0;4 +FILE_NAME_26=1511;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.h;0;4 +FILE_NAME_27=1197;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.cpp;0;4 +FILE_NAME_28=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBarracksSpr.i;0;4 +FILE_NAME_29=937;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMouseSpr.i;0;4 +FILE_NAME_30=225;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPeasantSpr.i;0;4 +FILE_NAME_31=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSoldierSpr.i;0;4 +FILE_NAME_32=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTowerSpr.i;0;4 +FILE_NAME_33=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTownCentre.i;0;4 +FILE_NAME_34=2402;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCursor.cpp;0;4 +FILE_NAME_35=1300;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCursor.h;0;4 +FILE_NAME_36=3153;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.cpp;0;4 +FILE_NAME_37=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayerBtn.cpp;0;4 [VTE] last_dir=/home/xavier/PocketEmpires/src diff --git a/Sprite.cpp b/Sprite.cpp index 131a4f1..2a5c3dc 100644 --- a/Sprite.cpp +++ b/Sprite.cpp @@ -58,6 +58,38 @@ _y(0) { } +/*****************************************************************//** + * + * \brief This function draws a \ref Sprite object on the screen. + * + * \remarks If \ref Sprite object must be followed by a \ref Camera + * object, X and Y coordinates are automatically adjusted. + * + *********************************************************************/ +void Sprite::draw(void) +{ + gb.display.setColor(_colour, WHITE); + + if (_cam != NULL) + { + const uint8_t x = _followCam ? _cam->getX(_x) : _x; + const uint8_t y = _followCam ? _cam->getY(_y) : _y; + + if (_pu8SprData != NULL) + { + gb.display.drawBitmap(x, y, _pu8SprData); + } + else + { + /* Undefined sprite data. */ + } + } + else + { + /* Error: uninitialized camera. */ + } +} + /*****************************************************************//** * * \brief Reportedly, this function updates X/Y coordinates for @@ -76,20 +108,3 @@ void Sprite::setPos(const uint8_t x, const uint8_t y) _x = x; _y = y; } - -void Sprite::draw(void) -{ - gb.display.setColor(_colour, WHITE); - - if (_cam != NULL) - { - const uint8_t x = _followCam ? _cam->getX(_x) : _x; - const uint8_t y = _followCam ? _cam->getY(_y) : _y; - - gb.display.drawBitmap(x, y, _pu8SprData); - } - else - { - /* Error: uninitialized camera. */ - } -} diff --git a/System.h b/System.h index 0459243..315acc8 100644 --- a/System.h +++ b/System.h @@ -19,8 +19,6 @@ * Global Variables * * **************************************/ -/* Gamebuino object is only visible for - * and accessed by C++ source files. */ extern Gamebuino gb; /* ************************************** diff --git a/Unit.cpp b/Unit.cpp index a8a5988..89e218e 100644 --- a/Unit.cpp +++ b/Unit.cpp @@ -99,8 +99,6 @@ void Unit::handler(void) { /* Execute base class handler. */ BaseUnit::handler(); - - drawHandler(); } /*****************************************************************//** diff --git a/Unit.h b/Unit.h index 7a5f59f..e110ba7 100644 --- a/Unit.h +++ b/Unit.h @@ -44,9 +44,9 @@ class Unit : public BaseUnit explicit Unit(const Unit::tUnitID eUnitID = UNIT_ID_NONE); void create(const enum Unit::tUnitID eUnitID, const uint16_t x, const uint16_t y); void handler(void); + void drawHandler(void); private: - void drawHandler(void); enum tUnitID _eUnitID; };