From 7ff4f34a4881c1fa65e3ea428e7cc985ae4e6818 Mon Sep 17 00:00:00 2001 From: oioitff Date: Thu, 18 Apr 2013 17:13:00 +0800 Subject: [PATCH] Add an UI for modifying controls for PC --- Windows/KeyboardDevice.cpp | 140 ++++++++++++++++++++++++++++++- Windows/WndMainWindow.cpp | 163 ++++++++++++++++++++++++++++++------- Windows/ppsspp.rc | 77 +++++++++--------- Windows/psp.jpg | Bin 0 -> 30651 bytes Windows/resource.h | 18 ++++ 5 files changed, 330 insertions(+), 68 deletions(-) create mode 100644 Windows/psp.jpg diff --git a/Windows/KeyboardDevice.cpp b/Windows/KeyboardDevice.cpp index c8e2811016..807c346614 100644 --- a/Windows/KeyboardDevice.cpp +++ b/Windows/KeyboardDevice.cpp @@ -67,4 +67,142 @@ int KeyboardDevice::UpdateState(InputState &input_state) { input_state.pad_lstick_x += analogX; input_state.pad_lstick_y += analogY; return 0; -} \ No newline at end of file +} + +struct key_name { + unsigned char key; + char name[10]; +}; + +const key_name key_name_map[] = { + {'A', "A"}, + {'B', "B"}, + {'C', "C"}, + {'D', "D"}, + {'E', "E"}, + {'F', "F"}, + {'G', "G"}, + {'H', "H"}, + {'I', "I"}, + {'J', "J"}, + {'K', "K"}, + {'L', "L"}, + {'M', "M"}, + {'N', "N"}, + {'O', "O"}, + {'P', "P"}, + {'Q', "Q"}, + {'R', "R"}, + {'S', "S"}, + {'T', "T"}, + {'U', "U"}, + {'V', "V"}, + {'W', "W"}, + {'X', "X"}, + {'Y', "Y"}, + {'Z', "Z"}, + {'1', "1"}, + {'2', "2"}, + {'3', "3"}, + {'4', "4"}, + {'5', "5"}, + {'6', "6"}, + {'7', "7"}, + {'8', "8"}, + {'9', "9"}, + {'0', "0"}, + {VK_BACK, "Backspace"}, + {VK_TAB, "Tab"}, + {VK_CLEAR, "Clear"}, + {VK_RETURN, "Return"}, + {VK_SHIFT, "Shift"}, + {VK_CONTROL, "Ctrl"}, + {VK_MENU, "Alt"}, + {VK_PAUSE, "Pause"}, + {VK_CAPITAL, "Caps"}, + {VK_ESCAPE, "Esc"}, + {VK_SPACE, "Space"}, + {VK_PRIOR, "PgUp"}, + {VK_NEXT, "PgDown"}, + {VK_END, "End"}, + {VK_HOME, "Home"}, + {VK_LEFT, "Left"}, + {VK_UP, "Up"}, + {VK_RIGHT, "Right"}, + {VK_DOWN, "Down"}, + {VK_SELECT, "Select"}, + {VK_INSERT, "Insert"}, + {VK_DELETE, "Delete"}, + {VK_HELP, "Help"}, + {VK_NUMPAD0, "Num 0"}, + {VK_NUMPAD1, "Num 1"}, + {VK_NUMPAD2, "Num 2"}, + {VK_NUMPAD3, "Num 3"}, + {VK_NUMPAD4, "Num 4"}, + {VK_NUMPAD5, "Num 5"}, + {VK_NUMPAD6, "Num 6"}, + {VK_NUMPAD7, "Num 7"}, + {VK_NUMPAD8, "Num 8"}, + {VK_NUMPAD9, "Num 9"}, + {VK_MULTIPLY, "Num *"}, + {VK_ADD, "Num +"}, + {VK_SEPARATOR, "Num Sep"}, + {VK_SUBTRACT, "Num -"}, + {VK_DECIMAL, "Num ."}, + {VK_DIVIDE, "Num /"}, + {VK_F1, "F1"}, + {VK_F2, "F2"}, + {VK_F3, "F3"}, + {VK_F4, "F4"}, + {VK_F5, "F5"}, + {VK_F6, "F6"}, + {VK_F7, "F7"}, + {VK_F8, "F8"}, + {VK_F9, "F9"}, + {VK_F10, "F10"}, + {VK_F11, "F11"}, + {VK_F12, "F12"}, + {VK_OEM_NEC_EQUAL, "Num ="}, + {VK_OEM_1, ";"}, + {VK_OEM_PLUS, "+"}, + {VK_OEM_COMMA, ","}, + {VK_OEM_MINUS, "-"}, + {VK_OEM_PERIOD, "."}, + {VK_OEM_2, "?"}, + {VK_OEM_3, "~"}, + {VK_OEM_4, "["}, + {VK_OEM_5, "|"}, + {VK_OEM_6, "]"}, + {VK_OEM_7, "'"} +}; + +const int key_name_map_size = sizeof(key_name_map) / sizeof(key_name); + +const char * getVirtualKeyName(unsigned char key) +{ + for (int i = 0; i < key_name_map_size; i++) { + if (key_name_map[i].key == key) + return key_name_map[i].name; + } + return 0; +} + +bool saveControlsToFile() { + FILE *wfp = fopen("PPSSPPControls.dat", "wb"); + if (!wfp) + return false; + fwrite(key_pad_map, 1, sizeof(key_pad_map), wfp); + fwrite(analog_ctrl_map, 1, sizeof(analog_ctrl_map), wfp); + fclose(wfp); + return true; +} + +bool loadControlsFromFile() { + FILE *rfp = fopen("PPSSPPControls.dat", "rb"); + if (!rfp) + return false; + fread(key_pad_map, 1, sizeof(key_pad_map), rfp); + fread(analog_ctrl_map, 1, sizeof(analog_ctrl_map), rfp); + fclose(rfp); + return true; +} diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 81881d958a..886ab7bb84 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "base/NativeApp.h" #include "Globals.h" @@ -45,6 +46,12 @@ static RECT g_normalRC = {0}; extern InputState input_state; +extern unsigned short analog_ctrl_map[]; +extern unsigned int key_pad_map[]; +extern const char * getVirtualKeyName(unsigned char key); +extern bool saveControlsToFile(); +extern bool loadControlsFromFile(); + namespace MainWindow { HWND hwndMain; @@ -358,6 +365,7 @@ namespace MainWindow switch (message) { case WM_CREATE: + loadControlsFromFile(); break; case WM_MOVE: @@ -822,47 +830,144 @@ namespace MainWindow "Rapid Fire\tShift", }; - // Message handler for controls box. + static HHOOK pKeydownHook; + static const int control_map_size = IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO + 1; + static u8 control_map[control_map_size]; + RECT getRedrawRect(HWND hWnd) { + RECT rc; + HWND hDlg = GetParent(hWnd); + GetWindowRect(hWnd, &rc); + POINT pt = {0, 0}; + ScreenToClient(hDlg, &pt); + rc.left += pt.x; + rc.right += pt.x; + rc.top += pt.y; + rc.bottom += pt.y; + + return rc; + } + + LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) + { + HWND hEdit = GetFocus(); + UINT nCtrlID = GetDlgCtrlID(hEdit); + if (nCtrlID < IDC_EDIT_KEY_TURBO || nCtrlID > IDC_EDIT_KEY_ANALOG_RIGHT) { + return CallNextHookEx(pKeydownHook, nCode, wParam, lParam); + } + if (!(lParam&(1<<31))) { + // key down + HWND hDlg = GetParent(hEdit); + const char *str = getVirtualKeyName(wParam); + if (str) { + control_map[nCtrlID - IDC_EDIT_KEY_TURBO] = wParam; + SetWindowTextA(hEdit, str); + RECT rc = getRedrawRect(hEdit); + InvalidateRect(hDlg, &rc, false); + } + else + MessageBoxA(hDlg, "Not supported!", "controller", MB_OK); + } + return 1; + } + + BOOL LoadImageFromResource(CImage *image, HINSTANCE hInstance, LPCTSTR pszResourceName, LPCTSTR lpType) + { + HRSRC hrsrc = FindResource(hInstance, pszResourceName, lpType); + if (!hrsrc) + return FALSE; + DWORD dwlen = SizeofResource(hInstance, hrsrc); + BYTE *lpRsrc = (BYTE*)LoadResource(hInstance, hrsrc); + if (!lpRsrc) + return FALSE; + HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, dwlen); + BYTE* pmem = (BYTE*)GlobalLock(hMem); + memcpy(pmem, lpRsrc, dwlen); + GlobalUnlock(hMem); + IStream* pstm; + CreateStreamOnHGlobal(hMem, FALSE, &pstm); + BOOL bResult = (image->Load(pstm) == S_OK); + pstm->Release(); + GlobalFree(hMem); + FreeResource(lpRsrc); + return bResult; + } + + // Message handler for control box. LRESULT CALLBACK Controls(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { + static CImage image; switch (message) { case WM_INITDIALOG: W32Util::CenterWindow(hDlg); { // TODO: connect to keyboard device instead - HWND list = GetDlgItem(hDlg, IDC_LISTCONTROLS); - int stops[1] = {80}; - SendMessage(list, LB_SETTABSTOPS, 1, (LPARAM)stops); - for (int i = 0; i < sizeof(controllist)/sizeof(controllist[0]); i++) { - SendMessage(list, LB_INSERTSTRING, -1, (LPARAM)controllist[i]); - } - - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "None"); - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "XInput"); - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "DirectInput"); - if ((g_Config.iForceInputDevice < 0) || (g_Config.iForceInputDevice > 1)) - { - ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), 0); - } - else - { - ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), (g_Config.iForceInputDevice + 1)); + if (image.IsNull()) + LoadImageFromResource(&image, hInst, MAKEINTRESOURCE(IDB_IMAGE_PSP), "JPG"); + int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1); + for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) { + HWND hEdit = GetDlgItem(hDlg, IDC_EDIT_KEY_TURBO + i); + if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT) + control_map[i] = key_pad_map[i * 2]; + else + control_map[i] = analog_ctrl_map[(i - key_pad_size) * 2]; + SetWindowTextA(hEdit, getVirtualKeyName(control_map[i])); } + DWORD dwThreadID = GetWindowThreadProcessId(hDlg,NULL); + pKeydownHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc, NULL, dwThreadID); } return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) + case WM_PAINT: { - case IDOK: - g_Config.iForceInputDevice = (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE)) - 1); - EndDialog(hDlg, IDOK); - return TRUE; - - case IDCANCEL: - EndDialog(hDlg, IDCANCEL); - return TRUE; + PAINTSTRUCT pst; + HDC hdc = BeginPaint(hDlg, &pst); + int width = image.GetWidth(); + int height = image.GetHeight(); + image.BitBlt(hdc, 0, 0, width, height, 0 , 100); + EndPaint(hDlg, &pst); + return TRUE; + } + case WM_CTLCOLORSTATIC: + { + HDC hdc=(HDC)wParam; + SetBkMode(hdc, TRANSPARENT); + return (LRESULT)GetStockObject(NULL_BRUSH); + } + case WM_CTLCOLOREDIT: + { + HDC hdc = (HDC)wParam; + SetBkMode(hdc, TRANSPARENT); + SetTextColor(hdc, RGB(255, 0, 0)); + HWND hEdit = (HWND)lParam; + RECT rc = getRedrawRect(hEdit); + RECT clientrc; + GetClientRect(hEdit, &clientrc); + image.BitBlt(hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, rc.left, rc.top + 100); + char str[11]; + clientrc.left += 1; + clientrc.right += 1; + clientrc.top += 1; + clientrc.bottom += 1; + GetWindowTextA(hEdit, str, 10); + DrawTextA(hdc, str, strlen(str), &clientrc, DT_CENTER|DT_SINGLELINE); + return (LRESULT)GetStockObject(NULL_BRUSH); + } + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + if (LOWORD(wParam) == IDOK) { + int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1); + for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) { + if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT) + key_pad_map[i * 2] = control_map[i]; + else + analog_ctrl_map[(i - key_pad_size) * 2] = control_map[i]; + } + saveControlsToFile(); + } + UnhookWindowsHookEx(pKeydownHook); + EndDialog(hDlg, LOWORD(wParam)); + return TRUE; } break; } diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index dff741a5fb..3d428ef5aa 100644 --- a/Windows/ppsspp.rc +++ b/Windows/ppsspp.rc @@ -94,6 +94,33 @@ BEGIN CONTROL "",IDC_TABDATATYPE,"SysTabControl32",TCS_BUTTONS,0,1,205,15 END +IDD_CONTROLS DIALOGEX 0, 0, 443, 234 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Controls" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,176,217,50,14 + PUSHBUTTON "Cancel",IDCANCEL,230,217,50,14 + LTEXT "Xbox 360 controllers are supported! Just plug one in and use it!",IDC_STATIC,14,6,201,8 + LTEXT "Turbo Mode:",IDC_STATIC,339,203,42,8 + EDITTEXT IDC_EDIT_KEYUP,52,73,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYLEFT,30,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYRIGHT,72,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYDOWN,52,112,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_TRIANGLE,362,67,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_RECTANGLE,339,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_CIRCLE,386,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_CROSS,364,114,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_LEFT_THUMB,49,26,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_RIGHT_THUMB,361,25,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_SELECT,289,161,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_START,323,161,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_UP,54,130,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_LEFT,38,145,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_RIGHT,71,145,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_DOWN,54,159,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_TURBO,382,200,33,14,ES_CENTER | ES_AUTOHSCROLL +END ///////////////////////////////////////////////////////////////////////////// // @@ -143,6 +170,12 @@ BEGIN RIGHTMARGIN, 247 BOTTOMMARGIN, 413 END + + IDD_CONTROLS, DIALOG + BEGIN + MOCKUP, 1, 100, 0, -100, ".\psp.jpg" + RIGHTMARGIN, 440 + END END #endif // APSTUDIO_INVOKED @@ -158,44 +191,6 @@ IDI_PPSSPP ICON "ppsspp.ico" IDI_STOP ICON "icon1.ico" IDI_STOPDISABLE ICON "stop1.ico" -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_CONTROLS DIALOGEX 0, 0, 287, 238 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Controls" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,176,217,50,14 - PUSHBUTTON "Cancel",IDCANCEL,230,217,50,14 - LTEXT "NOTE: Currently controls are NOT configurable.\nHowever: Xbox 360 controllers are supported! Just plug one in and use it!",IDC_STATIC,7,7,188,30 - LISTBOX IDC_LISTCONTROLS,7,39,273,176,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "Force device:",IDC_STATIC,10,220,45,11 - COMBOBOX IDC_FORCE_INPUT_DEVICE,59,219,84,140,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_CONTROLS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 280 - TOPMARGIN, 7 - BOTTOMMARGIN, 231 - END -END -#endif // APSTUDIO_INVOKED - - ///////////////////////////////////////////////////////////////////////////// // // Menu @@ -353,6 +348,12 @@ END #endif // APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// JPG +// + +IDB_IMAGE_PSP JPG "psp.jpg" ///////////////////////////////////////////////////////////////////////////// // diff --git a/Windows/psp.jpg b/Windows/psp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d96900753d1b6024089708d7fa8a1717d4faa949 GIT binary patch literal 30651 zcmb4p1yEdH^X1?c+}(Xha3{gteURV;cbDMqGFZ^y4ugAem*7r-KyZQ+2(ShD$@lGl zx3+d_sP}H)zNb&0?)zpQZ=M#Pz5y^~C1oT5P|yGX6aWeUc-jQ)N_beB0{}8IOaMdx z000NTf`WOTdii66f(DQP003D40Kg6f4Zr~a0OkMy02}&WAImV<7hf;HpO=W3IE9+0 zvx}LnGljV22TKLiF1O7r|V`crz z0r2z%fQbl=4g-LJq5?o;Lcw4{J*@zO0SK^g@NlpQ@Nn=52ndMCm?+3dNXWS87_Tr1 z@rZ~B@CXP<$Qh_eNa@H32&mss(=jr!u&@wQvT?F8b20!~n4wTmP|#7)$uKd=gqdlW zh5x@_Pkn%9000^q2I^Vzzh6+$FtBj&hzJ+}C>UsHco-xkBvg1f7`W#=VPG-gu;8&N z*+f)~91{?5aH-f;0}{XDiK?kS0~*r#rud1eP+%S9sA zk1te8>@)D*R}$3|WQ3ke=5<`#92trZXLDuwj#);MqA6}QWqcq-5u^OPZ11VTJX@jv7Ld4w=945dgUB>= z{9Q5>7#%)TJrZ5=;#F!UlJh4y^=A^#xnVp)diwcCHmOzNRg#7|i zHI)6r&>(?O`NgaPhU3Fb(0@r(F!HEmC^w&qo%x)a>Ca;JKg0aLhqf=Fb|lqb(ol!w z7E`e^L-LuBoeC2Sz=X=rSuJ6L;rLXN^7O%k%4%Rjjh7f$|MD*x35+fosv3$eVH}E% zJbE5JXP2Um^IcNIP2E&PQQTC^Oj7*M5RzNWAKJQLLS+pwuI=&oX(c{u{6q^k2hgT}nnOAndu-Ozh>r|6)}!5?#VPlA>Xo0EPppfd5EK zsL`T264+kyGW(p-3iV68CML}n>L9#7hvza7YNSZSYds(SGavSH_IxJf^FpwWP83Bs z6MMN0_+KYU4fDTrG?P>(29`jw5==2hqRZSQ;>DOifAH`$LCh2(31Gz`2%?#!h5*$N zr75Hw2#yyWf@CE@kk9j(Aj2S7U=-sLo(Kvx(=!C*ueJYDk{zN1K#0T!BqU~QrpL3kp>|5uR2|K$2o#^)j>{*A~j`**U>Cgzud z{geOy%Ov|ZyMJguv-_`ze^=n8NB&CjzcYDm9+2Wc?Nalc*57jdmjoaIdQ%WIMDuz1 zA2t7Lnrh@eks*o>onCMntu!b zx9NX!tN6G0f77ja>6`zo+spEQy8?vw9QL0ke3|%LlIP<8Eg8HMFykLB;tNeH0;qz z69WRQP!YlTr;Rm*EB@m0OkVW427mSYGq%h>e*a|lV%L;N`o|IpEQoqhlhzaoPZgpm zlBQe$j;HyXV8(MJm*i@SW<p&I@?gaypNpmC6h{~HDLydIc=!Av#0gh&;|Ncp@EUpDKrNdKjK z2s0(DP4H0^g{JI(cF#YXm-+uT@t;lb?|zj?u82pl9fA9ESpdCkraz57@tQTqwlnH)5UuT_A(1C}N%rB31BF#>?@Uw~8qxlqm>N7=$N^K?CCaleOsI zx{1P>f>?twAvhI@aHe#@$U_hd;fmm?0NVd?X<|@7d=crn%U)Uv#7QCZ+zP-%aN={T zr6W?Cf;hF$8F1sX;;5p?l97l0bdjp)^L`cmXLGqp#54bm&pGvHZ{X)43RC|5ekK4y zD)3juFkshOm(tC|AtHR2R?CPuBUGQLjbVyVzMj|7oFi&?4UsBE%xts4M-?! z0BsN1xAxa1EpeNymxK4}3xoI7`$w+TrC(TEjzy4weP!B**5Mm4N}qn@99$^7PVd)) z!Ed4@8JD7^2wAu!r_>U8LfczU53Qy5K_j3;cmi;^FKSJ1XDC%XECd)yhy@Ojp| zecB!zH`ahq=))KJJ3!$Hz-@mp^K+N!-6Ch#h0$HZZjQT`!g=kll>D{zB%g}YbSrc@ z4|}{{@NqLyadQ+V9!(_3VUPAtfWG#blS7$KEx&Ot7)6)Vort%V*?nXwKi8ShX#r1w zDDpYl&1gd`N%XK!Kiz@TgX#s}i~{w$z zyqny4(7E87A*FhETvj#Uo7}Nzi7=|+_wAlRh-*{Nddmaj@qy>y>!zO73L`7Ig3X4J zXX@I=c%KH)BRM3s^_b$9RZ~M}zf@5>bF7c9)Zk6aV~=9r*;pIp7pO-t&*FRY8~wQ7 zb-K$N#_tbnp8zS=zUKEBUdqN^k}C)?L@isiCD+V`eYM{vd+VfD4^K@mIQ_t$pVsVz z&d1#=HjJg@*k-y2tF8uXMfSTRw-F5E0NhW2)$wcfcKYbwXi&e#o&aW^!Itm&c}#G7 zOSczuT35YyGEVipF}$36(iXlLl4nj{tNqO8`bqTek8`x8olq~)GbGtz?ZY}@<<+Mn zbuZ^0kBu)DPkd8vpv9nR_-dI~!8g|cB8Bs1HKS1{2=b9{tYcz1Aer<_MCkke-TXq{AEUTW z0A8U8@1lW6?do3}i@BFeeYI6sdwZ9PezJnJ(PueQ_EW=;(-)M}J{C`aMmF@UhX_*I z0huSj_!)XOQ=FoQ6yfbe9Qsl5yPJ|sF+yrvyEwEG`Um3+%4vDS)BZE`9EKZ-sGRFY z%8MO@VnOPtv&t{;cs^Z4kcbg%h8x1%7YsfDj^CTyh(wWJS5g1!mg~K38fgyufu`)` z-b2vexTTH0>-5<02FbYhBfWpziPK|)XY}@B=|-e6c_!Z*)Ga^8E%Ho0mHnCUt(zyn zxC7h6fYN+^4{!BIGyUg)CqU(U9MMiY7GX^ng&yDn1imAyQ+c&kSiS)Tx5 z@2*M+Vi~x?Wm|(1JB0m8p433q(JQq{wc(!?^p8%mb z^Z8w80>^`_laho_fRXm@O|K_FGIJN7Ujucd7WwvES7z68(5%oCApCb*82YXK6M!nB zs?YujP{JT3+)I4dzw-n@ns=Hkr4iv+Z(Q1$%>qfhUXZe3-kWA2Ksj7tp>;HUWCoAcBk$H5s%&3 zvn2eLZTiIo;I7rW<@TQkBZ+ngtq{+QuzOWkn;*UkGKX1@vt)7kMb(xaZ&O+;x1E^{ z&yc>$+gqZz=WEZ=`l{dBQHrc1K2HycaqPDvk(T)2Nq3K!DMGpVpt$TyB z$U(UfKugWC;?DSFA(u)`4!kP&22!}5?<+mcj2p4?$V5pw10@O6aA$_9X(?*z#%mBR zdMiw8yAE@hT%aLG*ftj`Fj12@QuA!(hp*gZY@camujRg^xmsDS0{iNa&Bp{()@+&{@xe6}T=z~~PTgGkOd3h~NsV3Oc8>6& z^_h`bdt=MIRdg>3>q?(lRM{B&UDeYxZ%?@xg(gW9v*q+WT|nzWUn^g&=oY@_#E;T5v) z?MHa~Pt4vfb1%MVzu!T<8&7uMyhVDnsXQ>^O!)r8%R<5aoWm;wy6G2ThiKD!vh8kB z($aIPCmVeV2RQdXm+vBu{F0cxKi1o7$sGOgvS_>Xd9}fFmk_3;Tn%`*<}SpAFM?{`oak|9&ec}qmB@mtaEOLRjH zcIw`B*;=9=I?y{P{U` zPagy6*{mRb>zvNqN&99h8oYs(x~EU^V&=l$95<^X?<>5+A=Cjef6nHSpms}Xaiw^z zCM&3Cvl9J^zP>`&HrVE@IYl9R-Z?|ZO53AwXQ^s!FGcv2Y=T=#NSaRtzs zWT7R_Xl$W=vE~9rbx<$rRBhaLue#!fXS%g%OXV$NIvFFNPOOpr^IH~oktYDsp@I9? zams>$Ws~T)*$qKIXVq*HvZyEQ=~1HwJ$$|Qf0%4~=cjO_$Jt$juUXJeazZty#pDWS zV{8&^%ygk@_R+{V(7#TH-;V&BE8day9(+dc}^=v(MFS`oHV|w%(8oksxjjud*AV6?h%1Q)+Z)FGU4V4$E)9nt~rULjymsIb`hdfOw#nUL-Dy=Gjw-o@LCFp`Kl1C z^-#MJEEu9kpKqL=Zy1A-@Dym^;)5w5L!!9Q7{Soc82+Ld{yH7NX=GHqughcBI3IPa zq%SbgmPp*VV)h+tNXyNo0f{#7=k298Qa8e%WL?6)Y5VkTdbkw#TP^`tBK8}n_~jCG zTFLfr+wT-2Ok6R!Wn1@QGIl>%X>%iXf16^daRoP}w$8^3+Sr&>8T*O;S|fqZ#t=GN z-l{^dP;;8lP0?j`Ijsb3StMQlPbWZu8)@Q_01%v0$TbCf+-@A zF#4`b}EpiUg*&($^CY>k~zBG@vnpu|)OMgefHuVJT%`m4hiTf+;Wxf-yzi z6ae5Ph}+98^%wEy+fe~$5n_7VNKGXsyqF{?h1%v5%Og$h3@y8up;TmGR*ISh{oCu2 zflbI63-WCH+4fE_G_a8x@paTGC5u;7@q(xbGYcQ`Bjw*8*~6dM&)N1Gfm`HYuU^a_+d1h=MvgB{DZ`^*Mj zaoZo(&LbxCRqHODkY%I20!gIhEon+j%rOEDlCv6NZ0{N?&;(N6qZ_=&jhx=X=`OMY zed08_sdZN9zr*M1yob$Tlh7B8{+gHTnoP6I4?Icy37tVs2$N#D3Sy{1BVLxK+x8vU84-}*%BY#2-y4WipHDqR6$v<^UFaCq`8I7o zRd(YThsx}hz+J!`=Z%4EN=7L%POC4LuAiueUTud)OdtY~Ft+@moO4VCdDTNO8x$j^isH z$r>U-@zu!YEl;51`fg1d!`qOsAj_=4hCFoO1Z z=|VPDO_a9?Y-!2(^3#IIHfdU->*K6tP-!r1y>@&fLlrX|}i8x2+rRuU|xu4sYC z{)6UoiqpIA^1fg??u+IqO%t#_z~q+}_Zt@WoynF3-qCSeW-MBs?!28OzJb3aEp(_H zw9b%;ZLR&}&Rux_7Hpns>1qcae$@=7g`p3JkN6heu=Dxaa@h?fvEDFuW3b@1PB2;v zgM6LjV?z>Ix=BT&o_W{w&yO`N@#+CgXpJmyr=`2_qvYtnkIXM#>H$O#+rX9=td(@J zvMpR5@A)VqOL&ip%U74sDNboO=9s@9yX}}emS!NK=9bz?J<4?)w%J5phw0!?y#2Ap z&u{P#i}Hzt-&L*)irM#u} z#Y7cY7&?2P&a(F338Q=p2xQ0@IDwLoKDvHWX1F%;v-#3Bt9KK5eptv0XvD|Ma=@6MQ&K+VMa>8=Yr3HG9X%fnN%;N6=T^Bhj)*npY%vD*g6#1 zoB&(uxCz8U1P#2#no3kb2q&%7z+JX4(m!02IWRj6AU5M};sQhhYI5>h=ardALRb z?3IRdm?_*KG*jJen#*F?_KTm7g+-|J4z#+Y!0K~tUuGMkd7D?Lm(=_Y#oT^HFs%DZ z$zmE~y=j6i=y|62CF!^&o|%wDGh6}ps4K9EaY(1UEm_EWm%8$=OlI*UUuytDNQZdb zrsm&L9N4+C80LXKLt}-Rz!+n$EM}7CVwbv*j~|n-qDc4zhpl_Mw6kkfd`q4kqJPg| zF~P)KQ{dEZnto87cd2kVE)Ap21P0JHmm(n#pe+`Vq+|jUD7Ok|wDZ=OJQFAIq>~Ee zrE7_HD0XalK`~&TCqOH8RDF8!6ToV+awA#EfU+GOVd^6p==( z@ep6>2rgE2HAFg`{!A48dQ4+n;UiV}et0eCEXI;4vOUh*2=5r?wenJno1e|cmobka zM`fU`vZ7co_eSYL3vaR+hi?+yD80AG+?`3x6-aie7^((f{m15=#%(8)>N4u~6Vz8G6#Din(XPDmO}HDx3n) zm_cVfrflVN4h~HMCCqj$GTaRfCzj+ibWcVzXMFd^Pe&rzdYBFkik0BOet;|OhO;B} zG=^;zFSU_Qqn4nj0z#>2ul7PL#bxd&l;OhEY@^B zmJZ1wF3jl(v8cQx6T8;xmJ#zVimqtHO2VJ z{Dboq?lMP5D2>Tc$wR6P^YMUc$sT`m|XXbb6GdXur`7zO)T zcW^lIZ7k?ZF$G6NMjTb-AGR6xK`K*hUD1y8d0wR+nP;KI3Ug;7oY`{dI^!l(kxSbA zvkh&yMU2bx*C8s(ZMRYZvk>Z{kW3EOvat>({&ldI7|8(0&t|@(f{X#CRLH4&KHGx5 zyzgS$mnNQY@B zvjih=D@-y21;_v_XHW+B2r~l04XenN(4PRxb$85uV_HtooAnoek9Mj%d~EKUc4sJT z1yrSQ$6d4`h7C%NK2UXR12^b^*cuHJm_FVw^RecVi@wZ;Br0jSF@mJW7}3o_y`IG2 z0LgpxKqM@HIs|0J^hrVN6_}%WsdivmM*B8P#6;YN+xhk!#ai-AM%r>eR{88!D<<@P z-Dv!3;D8}-*jdKv>x3r&0*kV9*n44{{I}?lsy+KFI9xTX`sXV0v?F{eaRg|ISo55Y z0NYimVnfY-fvp5c&kfu0@Ixxtm64sPv6lCR?NRWR6ku z#qKB4^d>|)WOqooJefrlaXp4xQ1=IS%4r@8C6{IXu=d78_nY?ZfSBEdOJZ`-1-Pnd zL}$t2m74m+_{bX*JrXF(W&x4ijIH}{OP{(Ly%p$1%dm;EJjT=aEIo3)Vj@PXnE#azc zF8(81*95svv%AdELF{=j=?j9oioe$|j6^Vt93Ex0=%eFqlD z`-EvSR4qx=`gw~wd5~anUJ^*e3xM9{oDpMYJ2K`Udy7c6ja%gW-Nv2bh(5h(w$`XA zx~MpR-uo><^T97MYUgXNf{O4G8h5aHEO=)7jxECCl5N=Fm3*v}nRR|bHU4*-`T>RZ z`7!mY&?=A_wt5*qL3+a=n^qHz@fd(9>beB~vRd95TWASh0-GtfLyA46HkiYr)T(^P z#YO!>U8wRkOGHQ?)IhfevsugzMDm)~9?cTYb!~{onN3e*%+c~x|E8%E#Sh(Ol^|$? zeJ%{fnm=Cfdd+auI@yd3)8_WbG1JcMqE(O?yDH{fRe4T+XeIr`R6I1cAtc?`DNeq$ zK9Q+}bwM+w8_9c(S&Vo{8@iJZv(2qqSMUdObG}fr38q{feY%#*X@hAazv2O?v20M( zT~1b;q=BZRn6ougj>O4-Ftggip;PTkRW($}*X2wpoFMdG6e}?@CR%VyTDLcE zJ!z0tfA&JCRXW?^nZ(Kus1c*X@+kNzo0#!}i}&jm*Nh(IBK}JSGvo(x#_fyOnGsHv zAJ-0SlM3CJMKnHNCK$Vh5xCkIS`gpD z_FDII$z=D2zFrO;wqvpd8*|;emxciwyL-lLKH*8=U~8#EvNPxvI77!xB!-#wNIC;n z8?)k#t~|ii962R1>lO{GQd9UbMKeLfUQ0*K=S7@Z6Sb(4mbAGGI(J#-U%z_m9H#fN z+MSiU3fT(ef!lf;y`;FVYzBR2BO>Kn?>y*7zaN^QHEGOO2~4Q`;yzz zu>R$?cJFA8g&vAobF(fn@b;{+ahd)Dn6oI+{4{2Sjy~p?da7wlxPWA)9WF8LSK^N# zbgHH_&Cu<%WGX8!sv-UF!vev!LR#ysdUQ-cd?Y)baJ4}}h+tzPLQHVXsSuRy8R2F| zrs7?%lCQNt=asSXxg+i}X6)AiQ_h&IN_?SHYE$Yd?n+D} zOBM%;AY*j6%T*3kf0aQwP?QL*oPI{Oj*MKPJr=)|=$HP@UYCRh4V-vE4ONuXcEJ83 zPbyR&9pCtDm3F@#F9tTMZmo!{M6W{Y%uiPy>g75$gIFTHLfKL0ZwJ;V?p7w~MI`7} zDubx3DB&l;W6e7P*ZQ+7cbQtVA*if3IkLZ+Ts65_Xp2p~i5R+@6rCDwa$;)R%)F&o zgDIW$u@PlB)ug)ypmG!406fVVq}1mee%Qkw`W7vgojGL~*GcQqI(>Cprz}X0&0nv? z#5mv`=o(%HL`wg1bemLu0t`TX$nw|LcC!Jo#QSqVBQ8o&1^ztBcRP*R;NSo z;~a}=?7p-mWuOk%k!93zyKPd*^$vNZ=s;PZbMpky6d$-eZ&{bqk$HgnV3c(5bFb7Y zgT_P`@~HNvbMTThoCy}AATq;NWD;qd@CjhB$58tvY7Mq0MqJeE!+`Hk1!)^`Ux5>m zX>6satqcK<-=IY%DocUPwb(mg2T8l`>Hb8smIsF)JyL zm^)@w*Bv_CT{j7Q^?{BQ+z8dUkFQ!1aCx4#W1Go++Dx4$C<+Npm~%=J}Uh`CWIKf35p`mF-Y7m zDTa|1+|~}^<|>J+yb@1$&l$LrnmS8`AMsc!1P3u{P29`_OTw_NNl>$DWfE(zu&m<3 z70vII-&Yj>wtkoSwn3*c**u$-C$-*}(rf8P=ICH(Sq1!|4sGRD>TDHH++|9tB{$p5 z%|mZ#xsS`Sns}H+U8clMCGX1{d0oP1VjiC?H>4SAHU+fWy0^VmGrMyX@6- zd^RSNrid$KvXWlQ!>w%lQLMp{bcEE$t^AI;v!+eY9^ITJL|u94cc3|5m}haov5v0Q zuB+XVeah~h1!osYuWod-Wipj+Yc{wVIK~gag9(|qYM5GeD<=G$+U0**_Q7h$0dIU- zO6ZejHCjJsIdt!*;QLRw=aMLl2kb55Fkwlxy;W<>_IVlaRPt{**RdUVV{9^(v{A22 zYy+CGWSBl^@Vrk&dw6%Kux2*jZQ1w)ASB;m{t+^|Co~`Th@|j9&mkbjjIklfCk(U{cI0P3`m3ELRj)1dz5txnn7#Z-wiKAZZQ@&i0L=y;~H zwlny76pyfP0>oh!J-~+csYUtBF=sFT_h>}a5XzB|ws36k%zWy^F7Pl95_hLVN@2Un!Y!+sH&zF~a=%uV^VCH*dRO9m7C zt~HLX?){vfXR0(e27tG{K5SlYp4feN*GPOaC-bP<`kOsuN-10^++@5W;^?ES^r=U; zpjT*rc|#T5{OFm_XZRp&J6>in1d29-w>MODL9ZFx&O1jS4-*~=k$zD}6~8A{dwG>o z#keGSlq7ET;$Rc(01ywTd$KgT|F z<5Wg8+ANGy1KICvud2jac|WvHQ#m@rz5-+m%#+6LJOL`&47zhwkpKnI%a#RehX*>C zX!+s{{f#3xL*6!T3(vpcFV-vytRUnT-}0No%u7tpH{3+r8xs?^`_2HP@>zFrc^mY2 zCDGr~YBloe)~5b8iA(%C?7?|B)fUF{l=%!+@Hzc z((}~go=3VTVcTgf#8h<3X(1K%F_jM0Mt@*x8)R2bEgR@LfD6gli^}^ z1t-I3(1?wA^J306X2=9gk69j`mCaAR<#&@3H0GeLb69Kpz*ULe%Qn}*){m{SsR$GH zZPufM^XK;Exex?}t)}&44}}Mzu$R###k~$MWHM2P$dZ`2&bBMcca&J-=NK~6X2kTC zsuC&X*e1){%9f7Pm^QC+^!yyD-?Xt?$0qb{=Bo9)0@^ocunvGy4rd|Rl89nKGGdx& z%Qo#BPFLsx8tvr1?=9;Jb9tkdrE+}{hq!=ZS7iMP!G&?}GU9zs@~M?a_cx!{e15cs zzumW-e4NsL0_aux9&X#%bx~)CVm90AEhs~c(-Whh?wCw!&XZK0#ZlCi{#(vZY8U7ORg2|;cD=f z1<`(SSe`Bo&CBb_hMWnt!3Gy6cdmX0j^t?PD^bl}8 z-D6xb&$kj$wh~v+rrbm1j!F7pYAQSrRxoRpJ>fFPuu01z>UdCHSg8A5#a8f)9-J`5 z=`cZI#74cRzz;-7hMe_TRG)=w^ouM%ic;e%$d<>$*=Jl>ecBsevB38o)!YgI@OXvoH}^ zEQznENc1ks2@V#o1u~HCFluV=vM;_ImLWA(A+$b-AVk*pG;b}tM`@CgL_gC&* zmb5eqU}!~6O@^vB)U`kcDaPUCP5KkM4n5X!C^PuOqdB5tgW3vMs>rqQy<5XDjWQC& zoS^FR-4Qr{Qtz+2vEbT3$6+M$?qJo%p1p^wL#sl_gV$v;D~M9lP#hU?yoDUzc8J>@ zXlQJ4XbLlymM+2aw3rIt4i=ng^-~AApUMv@j^+*&2h>+iQo<|xq;Nty%Y^4Qn7}Tv zKFhUFfF1o;RCL<5^q#vxwqaZKF6vu&-_lI4c_vk`3p_7($yJALBmisvhGO?wkB|mb zs0w2EY4>34skNI`p4`Q4f_|Zoh_~(NAtKDC)}MqpiHhqTiBZFam@^AL%B(aQEo%07 zySI<8Z3Q;SFaGpWwj-`*-WxCbESSAf0d!+74YxT^N z&2lHJkI?_*WP&rAESD@Jo$OWQh8d;#?aKEeOx`G!(UKb$!vjNeY=1ZLckX1`hg#=; zl)mlgo3Q2)lloR}caiB7XyS;_pf94`ceo#vIFqv)j=Jtcz3~EvAejWW@6F%qzOp9o zuWjCr!!Dm6B(CGii?QfDJR;U?9WFLIprS6I8Jl#108}A{)Fa#=4@F9q5UoLwxkcLd(}pr3QRC@G3qkMR@~$Evw31v`C~zpMMWNUONwJHgH(13t#}a?BfyH0 zG%HEAXmvV}qW%=BJRIxnQTcd27*A~^TOF$?!^%=T`Mi@pz;Krsmw=S>O`>#hLR`w` zsdf14&if+hcq@FSbOLK(=mQV}t)Z2thGc_6vza|9ruUHIiLqd`olAyf8!z05oA(=(r{Xxy# z^lHKL+(ilVZa+9r9JUa(bLpVv4P>M<4$&rr-WHf@<)D?iIA-`Ax`b0-8qTqo#G6i69&#dVBX1)Q`(?315RjDw zJp>8IpYSeu0vyQt?FIeb@ugbPnh+@4C6bca%}|E=u}xe-JUOtq_ECzR8z?WDPceiV z6=n#M)47)kU%C&f+(XGY;PDV4a8dB(wf9MI=4!0VYj3?NH()OG^r>R!J#`)*z66I3 zFP=LIRUI%%!294Pi4fi}r7Zw}oRLF9xjxjOnCK94%;hqq9@#7x5#_2y6 zYEr-^J8}NRCkw_h30fqXsfjA8t(o!C+z1>No{E>Jh}XWlB1*d^Cpgind{5z;7GxsO zt{mhWfDT{Vz^2=|{+fnr7sF>=@pt8K@MQAH1x@T5@5WT#)g0OWNkiK`jYQk}qTb3Q?U79!Wh4^U=kRMk?ZRB>h_Xru!BIr-Op;l9f88WzdldSb zI%lfVn`97A5Y%he>mUVjs{5_ zi;dN4Je!o=&6>c5C1PxzlzrEP$XW))!eV#By&*csGeTJI%U(oOL{vZ&VPW=sl{?R~FjGZUg93oCzK*0>WhIRS@+m{7S;bq?=9!+ChL*zT zR&Ysk$#V&ogu@pRRY0*$2SSwwbjx$G&dLeHeo-4qvlm5#FEvv`ReD1s&Rz;%8d^kL ziy{pBMbqpr7CZ7h=3fER3US-;8mf;?|m1geL2 zc`6WkeWdFg{Sv*T7wfmraO_kmeax5(ZApiL zqW^xN2_xo|+oaNY*haRjDpS2X)j4!N8DD>#+dX+L1Q2CUf2cjH*6>A5Q$URwUQ_mX z{`={arg}0Mh(FsgE|A%sUObHf?Adg$*>S0RDAKBdhc4ME3E)Lw7e&qOqsou=!|>h$M#oL!e6#yPA6D*INB5(#xL z>#O(%zE|a(_&I)XJz#dk@=K<;I>79I*~4lwh(uVT0aeUxS&vtX8<$$Xw)&sHx7Bu6 zpIFDT+CB_iT-KKfI)x^l;2%vsd%26~sh@pu_EaSCfFphj z(bs#g)a3;RjVf;OoM?WlghmjEU|`>hsp+9I>vc~UyAWdj5W2+@i^RYNPZa&uZ$Mbz znheeIrkVsjcNGh-b03FbStRHkVpgK~gD>#LRY*?P@F!28&|w(f&wW^2dG^N7EP6fL z2ZB8lRprTsb$PQ%3+;99>H{3tn2GI_KfWro*P2!qtPym;EiF4Nms1m&&2 zZT0*leJ`XGCLWk^M7MllC0-4Vf(3F+V!aIwxg#ITWz(w2^7YdFN^ z3F+XKaPNnfi(7_&#f5*~k)>uL+E$(#>1t5Vmxc4^FEyB`N^kPyVS8;NEa0E72!#nK zTB)_tTuN`))2#6P?cpxaj-pYgi4Y7di;4L>ek^wu5p^1@W$KdmPNLmB0XhuVKXMQ3 zpZCTy!kA9$Er1B~Lj4As>@&G>3HHsSKkinh#}G@y#+7OpV~^@P1crX;Ik(CJLO2%> zNgb-`u3-#U0h*KW4S8ptVumDl{J-3sw2xe;lq$7Y#6XVir;rf69)_D^ffPwpVoKC9 zaCC}TBeygMS68ygqSE_5%%afN%9c`#19ST<5=Dn&=;1jjkeJ;QAiuN-ZPhGd9AR2? zan=|YmtIIhK9PLHb7@aC3bQ1ZUYy=J&mD}tmL7X(xfrB97#0;+RNiM2n<1j2$S!^Z zI(xqvmbSO2Y8_yE;-A7>WLsn?7``Z4h0I5=z#m(r9df*b>Ad#@(AAg{KL|^y-?4V< z_~9&dw~D7AwmcBNO{fFs-*F_=K4t7)MIx+3o3CJF>P?d-D%qM(tD+9yL zT_znA!20i=un39{c6{}w7_Q2ngHlnH`}T2T_X5tOVPOkWQckKUCygGnu14B?k1pGo zk7|0vu{k+5^?GljXTA2$-IZcq^YO}ETkG2spu?BeWUgVn*!lee*9tdoO>SOUC^(L_ z<;Y`fL24Ts8O3h_C#x+GwR?pmD7U6)e(2(s*UViF`IVm36W~p1g|D@)$ZhXz<82J^ zxOazxRU9rZ_8Zbl>!^~LujNJyyzddl{11BD48dZjhq3|HX6;#0?Tw@ja$~2K&*O$r zm8*O%xj}K1)+kUz-s;%2G+2r#L?uvb704twx!mQ&0>>1Z0tMH;tW5(#mi|S$+hq0U z$NKIpfZ3yBFzcMktLF{pNkc-;o#_O9QlOgi`6mNY_O*O%4E8Sh^M2$k_iKh}~_dVK8Kv^X&Yt^nTXryMcl$9Q4M`+WYQ0>$?uOs}t`Wh$k+sDu{4pJY!-jJwm%BsW0tp;1%`dF%1OLhZuDcwEA2gWcA z|DT;qy^TeV^Y4s<&g2zUOw^R6M5qt6ko4d$mSddbu!2z3G}zkuV)s3-D@G94q)D8c z*e)c$?klk|Qq-PfmDBB0!ief&_^XE9jFC?wGr2qgI={Uefir1U`YEr5WS*h`uj2$hQ9Hx^$|zZ*Q!9 zJ|lp{x2%H^5^L+%P`Du7bgbvp|^*lHRzTXyKNEA z=BbX^(sNP1vOUlIIKFtRy` zNYHRpeMzRM*!S8z6L?1W+=jWj93O-{;Yp6Bq3=QJ5Q+fji5uQK73)(?cpKGM%IZXE zwsU!rB3Xz`sPY^c^<1oLZ3(#Fm6&R{q`BZka*K#6htjO5YG!*i@*+Yht%B50HNUIA z64!(Y{XsToVwP;@DbL2*hi$9ZYeezC>blFIHrn?O^udF>2d5NDu;NZ|cQ5Yl?gTCF zP^?hg-CNv?yA{{sT8f^b&+k8H&WrPEH@UC9?%B*Fvzgud`?;<7q#yW!)hCU|VeaZm zmMLR2gX}w2l|#|afY(ixmra6+>LnN18F1Mo&$^v}5p?IxOp|X&rd~xV?R2CX9pWz7 z90rGwCdNqO*Q}$v*h6>V@$DuJCbX!W%5DsBO7H=rcquKLDWI|_Ip2~9B{+NyXC|Y~ zx=c+eaw+m)o;AZTnuor@3e~un`sG^0Jv*DGh{!6*lhPixr9v z6h--+cOK~y&(!g0cB({)waV5svG+r>R|#)ziu;AJ0(<1CN3Vdk zV>G->`oF_l3`H+V^xCo)Y_<7BFV7NZJ>zJPK;8STdrktF z@FYHw{i=JI6HHF_rgKu9O+6eg1^C}et3H0rO@c9{$uu}3bNa{@yP~*y1#r~;40Mb0 zKhtw?XsDI9=|Cu3R8~m1v~6zsWsG=0K4p{5{GpA3@u&_)@?tqu!Bs%7t)Yc$h&#Bh zmBwXnVMm&y27f5X-tQER)J1$PR?y^8GlMb-;b(|0YPKiL03GxIvBjF7U=sKZ_x=te z{IB9=l|Va73;nhz8bS9qvs`RTTGM>QNdDSV7R@KkRI?V@aFoUL9Tc!^DP?l~N;4UE z<*ZqM(Rmj2;aB>%eP^g^8&E}EQf=!ORWpYL%+I?SFaGJ-b7QIIHV+byqcoWs<@QQxx-&0Lg<&dZ?l7#puf;=|X0k2qT$;blgGzq6zX-Q~I z6eI^_izFcy0p@c!IDE*hUk{4rG(b6!KrIrTk1b;2%>@p|R-Lzl#1YrA4kS>^i-&;N z;k*O;sCtd_OWjr_P5&umEiC}3Z`<%nk(wNI0Jd4T<6Y+`1} zoNH|MJ9%udp>OH)zKmL$Kx-WRM+Q>&{Ozh&-;h~q@0Np3mQC{k|FU??On+}i2 zLge{1-a_q>IAHK(h?4}&PwK3j7PJ3E#vZL>Y;5eGg^W@_BYknt`a8;4hRRO^Z!9|i zOB&`~chCjE>C$t_zIC%U!#a#qn*S`T-YPYEV{q^m<=H+Xwqn zUsJI8cl)fcM|CZUwN*6#0Dg*SmxFMOUlof>9Ee%yQKW0E=8htygxwv%o5uHJF1#)F z>}YXLJk1FpZ>vW*u>YkY;Jqbic>I6TEkup1-_;P>2HQqJ4Ajp?3gY_Q zpq=qdLEhkp-dpqZk(a}9ibb`V9c=bdk~Sbn@;o0Y?cqY^V{-eKuCb9$q zDh*~{MSr;j7li_+{4ODI+t@XdbR1gl^{zPQVs3!;LP-Tg6IA5SZC9>6yRpo-A4-IKoSgU2ag@z~QH!-DZo#Cag$2 z^CyB+v{7lU!^oU92*lI?40Pru4#@y31S9k%lI99t$hS39t>jH@`1@*5V!HfDmNIub+_`MhOgOEIwLMP{V76}O1T>Pj2ayx9hkO_ zT)Q7I8Q1qiF}XGH65L&Dm$eIj6{DnzId zfEXWEgf~)N0q37?%QbFq{=!t5jj=fb!})6@(oRk5lfiw{-tM$9>T$v#K= z5DcqDUnr^ed=Ea7W2nZuVF2OArVN=xj^(fDiJcqq;(>Ea$%EyRz6crFA3{<Z`GFB`RM-Ub@!3bjk_WN&1 zg?_u|ey^5y?m7aSBW=RwM=a8BvfZ1b)Y!3+PZAf#7AdxmH%Nt)saAHEUwSB6kgv_S zx$BD;<}OTKqIRlE*#d9l*kgt=YQmi|pdpN;! zPNZvx^=bWQ%fpzVIV(%T^YrCjY4_hmmW6?6N8usxV>4${#2AV+1U35@o(c%>ENTo0 zb$VM4j2K-Qiq4UMC1YXKI9PyX)U+~5^b!{4>#QFhw1rt#8WtQn!XDhz>IC@{x1E7o z=4PT>86l|FZ?x(vITKKH(+waXZ3Tl-f?G9lWasX$H8d+RZQ3SPOC@-gqa<(>&6I~bZsTP=g$`L<=<@YY24*;G53G8+=|29kBcEG&%xR{)>@wJpnhBw7 zHK*Kb{-phv*MpQ|cyG9@H9Z|x&%pCwNrt#8D>(wg*raZeV4cai!Kf9)>#$T;C)VN!iY1|nr(4=*$;*chf8H)YM8D>n^Vvv`kSwg`i!aVJ+R;7`>JO%h z<|s5i19=Jo_jRqMAZ_2JfK&r56jS?Ag<|az{FJ|7D`k&&s-8TUqGY5nvc(M0dA{bt zR{+o-1<^aFQ_7=E#%b+05qCnaboie}AI)U;i9fhUlC$4azO5F#GV>F8 zcqUZban^Z(vSn|nXINf zJa#=mRg_AHAKpD5z=st|iQPt?;*saMs|@nOT}k4mOsm^*jl3yC-XqQR)v%KNq{m1{ znyWtGx8n;P6jf)zYe0NQzYb$a_n7~if4>HvnSjZx;7P$y!4Q1*Anax|@$@BdY(B&* za_^_5+o+{2*54JZIL6Eqc*;Bn5h~<7nS3Dp;7y_%83zfA0vEw(^()|Wy)YWSPlUjM z?N}SLE%!O=L2j=BXAprng_Gdq6hNZCKO4I4O6A7hYLswpOt5$N^Qk&H5^KC z22UzWV7WTjGe0%zovv^p6!($hH6=DXdvqAVISU9Pcj4Cfn%f?iuPwg>B2qu6afTLQ&5RO3u84V~`{%gId6|FtlBH9+VrkZR3b?7W@jy^>5h+ zSipKLC{QA~9=Ob*Lm>XYe4-ia_4o!EH{IgUM&c#31d36RAmgalDcn&xZMbGyTO1|y zN8F4q1j)(}`|K5vzn#|BI*;d3QZ5{dPD=D5*fHh3h!Z5HvK^1VYFDQ?Fl*w*lx~`} z)b!C<34YK2uO4-+dd4G`!=~iaeirszJq9VynyxyTnDT~qz&GgKHZH}`;Ao<)A)9IB zCME)nUSDUDi|46RozO&BxY3uaZLb@8oUQNJ3n6qqD_;<`L#$W)Z_jp)v@2~*k(fsK z*E~}OXMad@!mC3QOcG)dtUhev&(2d0X{zzlj`>GKZQA+FXXb{{7ohp->7vJ;DErTM zvSLs#5~`xN|0Q)x$FbF2SkwrbHsUNX`7)EO98L1O;Q8D7{7{6Dr@;5lM$(xKo4<@4 zHFz<RK#6Brm8jAl5@U%mp|@2k236pr(bJirniSAlxP)dD2o@0|nb`7l3FcP!=D#A@f~ zT%U}kk2DzqH{2=s)U?RaF$@eXM|0K8FFlSl>A9lXW5153_?GuyTi~m$uil1nI&V(x z?cHVnC=0KNMrRrbZmle(SiyT<+<|jXPn3TvlhbplgFyPR8HqDH}*%N zja0c0_qJ{g1dho%JUexJ;zx?~`Wf?b0p7`4rwDvd)n9a^q)ns-mUg zU;3(ig$xz(h|oaGUjS9Oq988bVu zN!mJ>*;8|yg69=rWAjXc{G1y!?AUtuKH*9*dU8kJIpoO`OVCAlC8Q{$?S)r2u+g)L zGawfJWl{uY81E`qs?PhiT`M}-;h~Dmg@2`(<12yikWHui`rQ13(ASr*fpxpS*d|`& z0~gqZ_gzEf0q*N_zC{D^mn-o(Z=K>xUI8T=(sgTUqu%5L7Zh$8W&E}ugq+vseoUK0 z`0Kp_c+PEXo+*^RF8_Hd85fMK+r%`vM`{Ntz5+Ubztw>Parl3i2(R$3WVT-T3k6zk z^eNFSL1%|+gzsIkc2u}0_*c@yD_WIUs?Tj~c6x69KIaCHdXx7fcKAnKUkp~fu(3?= zuY3(>jK8>gIJ+yZnSLt?dMnYsVw`*-th)F1_w-fSlAR1oUi^3ZNDuxmLx~dc?+#u8 z$Qq6d!V5xkp3gEHG?TaSZyyiRgAV|nENk)W<4ay_jc27Q=SS@3gNK3th7fl$44KXz zHZ6KqfXuL>pZZZ-Y<6z@A14dT_Yonx(K%0}LyhY^m*wV5XMW#z7;R6Y@iQ3WX&;xa zbjKI)6U{Szn~p%HuzL_W6U_sPXvh-OY^mgitOo z0EL3rq$DI6Vw$V-(~FBQe>vA)p`O#O{jzqWfr*!L3n1ZYw2j2bxb|cb{Y8ltO8s_0 zNCl)0O$bt;rNmMWg~fKO4z859MJXO)jf(kL3kN!_6|!x`Pjxd)VjRh|3|6;#5mbwq zAJo0imOR}FMioElw7Gc&xY-jI3~3K-bDU;yo4zBZwcOo^+;hJ^@=e{GY_pqB{(*me;jOX4C5&1@LXfj*7hOJOcx(!W+78p4HR?pb`M>4TE zzQeh@`jE{heIq?0PoqRTmW5dmobVIunC2x$de61*diJTQ zd7FC;gP!Bv&bZ)bOHkChFl@O!{Cut2RukT3q#gyH0$&efw5~2HWNAME(iGK!H9h*B z>%-7|3#z4$94#|?G0WIKV!C$oN5EzHj3|biV7ZR22Ist_7n%u*2kidxNmv#4A*G9C zeeWV9K(Zt;-}JKvOU4Mj`3Z}|_#UD$TO1Xfrl$_wysCKjqFPfw`uUg5++Nr(nNeQD z*d(5-{fYH$sHOc9!T}_Hj3lk!+dOEvt0)jOC$x%NqaK=G1 z(uNn>!mc=jd-}tJGoq7ImK?btF+_9G+6W`{v3hFLX6L0F1Rk~|Ag;8v=+&x19|9(U zZ!*{N?1-m71AHSI^L~CeW=lAuvZ!ZulG=tQCCm<~u9%>1Wbs-%EoZq0>;7)f)auvA zvq07{(Otw@4OiOHL9>;f2>I?@*cDiW=?M=+7QC@FJA$DXq|70P_bh_BwG!Lc z%f|>)xxe|05POsyvgy9w%J|>74WHTbz5+sLU&@e#y}sZ1^axbJcs`HcT+3Yk5bSXp zQzX%vo?no{JLS=XV@F=4ld36397bw1@u|Bzy>Bm@(`)*$TxJjZC30K zINVbkD$fcEZ|9O#=jNu{i8D;S?BUVh6>6WNwH~9y63sGE_gL>mAdD`V1z5i9#yOHK ztnc&0W@8zz|G#HAoqI$!1s5%5fXRX&_E5z2NBk^GVwFthcklMIDu%_S_sK0ZO_O;? z!fi+CcjH$SXeVEv9FrY51N4y<6?FxKx!Iz796cLVeKTw4@TE4q86=q>1ZN9FlOV>Z zEQf?p9oHhj;%yD{gMVQ|s%%;By<2z`u*?)kNlklEunM6kk24R)BLM(60}TO-1x(Zy zb2<>(M}A@`v!YPq$naOhH!O|$Nh=y9>$wXLt1G=~8%J5~ViP_)C#;E46QJr~7btx& zfH*p~oo3+#e~Sbf`}FnP?xkt~;!4N{6nZnq%Ig+KQ&gwZP25w{m~U-WKSZ$irlxr=-!ad%x)DiWBr>1H#KhKldM(w-GDP9%(O|sGJ6b9Ne^b>Hc zu59Fv7Ei?4*qU5aT#2nVL|OK3I>%yFlG!i(e#p|MF;4XSzVQ{nac)Av8o`jsK!d@B zaKhAOrT@;2Y)b(Y-*^1J*p^{qW1`ZRm^T4!9L~9p7VxWpYJ9-;!9kk?`VE>PhtGkp z7+dLgmb4W|*_u2cAt|FhGZ>!E`$#gyEOQ7_b|2r6Q|8+WtTWOac0@aIwhnugUN+K# zWRuHSW$^8{@wvxw_?j$aYegI6ud^41yJ{H z{Dgo{O6k!reJ;yr@n5fil=fKiZf8Nts&g<(%$#8J#Lo5*)>BD9>@%S>5@ZUTEZq4yrsSyjnu63GotudC*luw_m*qyC-^_yR`@uL zFr#a}sz|+|ewqC0tEk_nSAJk(x(E`*Kj$d=?51w~0T26rIb1WfAeH&e^XvdQASyHS ztz3Zm5H9DKsZ%f~l_K zZ8pm~@)ktloc)RWO#%sLRy4_r5`4cYKc&X`&`&n0tQ_kfbTn3ir7#L=8p^3j7XGqJ zx=8np@!0FNY>-6kW_w<u7&LDuQVboNyyd32yvx#o@GmpRi!w4 zSuHKb`yuuU824kQXsAf2x_Yx*LvK3SirB2lI5<)`@GEUC?UKedFeIC*esm*wb2qi& zx?hnWu3*!lRu0s9#boGsZkamFO7BcwVZ!w}Z-yL10Fy)e>fn$Q0#W!0RH|Y-)}$no zE@Egla{Gxyk*3EM=b~!`1Z1cE3ds%%Eap2d)>(HLbAQ_m+t8(1*6U5!_E$Azb(z{B zRC-|hR>DR0dJyWlg~gc{*+!QYCuQes<;vWUMRMbJ;_>jdISClt5&uwrL<21U=12? z`Ew*Gi5GqNI(x>x!DFvxfI9bEvF?+mRY;+SH!2Yk$cF>~=Lsn5B$=8Gm~`xs=S9Y;!K98qm57%p`_5GH*WjJ7>YB zN%!EO4C3kNLL8F$;BDzeB>}OF-3Pv-M64*bj_g@?Y zIvh9KmP%JXm_a>%n>mm5o=$?&W_zbx1*0;fR`|mAzO=0lhmwiw8WuVouGZd}BuC}= zl7V*U(LYx*fty;BF!P-?QlN-!@xJDz$pdC~{0?5J7V?anhR3PyOp+ARj_^7%>!$}z zDnu8azgNhp5Z7SSgMVF=)R}qdlE3>EdGQ_eYbkGthri~&SCxl9zVm(c&-c9-*PbQ< zEJ)lQlmi#+ZO?L@&<@gW-;_=J?n~J*!5I_xK`k}8WWg-_8vDDpQ$545t*0XPxW?Wk zecEEKr2X2j_=V?`PIP^Bh&#V5GSB~L#cn*9CZ07Y1U}Y~K3)El*@_HgASa4QPH;p_ zJ*ukYs3Cp2{i*3jLz*}+gxsI4=b+>>?BK5v#}*mfI@Vlu781*0H{_i7e5ceHV!PHN z#^z&i_#mvpOlSylHevlS>CV1F0$1bWa-vtv5b}kMujS;jB;gehSygrx63c_-JZ2Q~ zon%>PW}79Y$*{0&@C*|xC0r5DX~Zj_Rqj;R5p7`P zSLwx=UUrD{S%_TMV*%(DkRf-fD|69i`Q=)PrYK2@Q1IM+ZQC=+D^>Wv>VCiM5Rw95 zg2<^hhEpB7fPIf0E8!Hdf+}O!x`M{eWr%cT*@VfB8p}aAg^DvGp9Q8K%(F z`tB`NgYh^wp7WX;xOfMfGY=7q2LR2iWSa{AnKHWc>&w`-6e;+WxS%H|dUi5uPKge* zXpz`hZIx~@C1Ag5?=BT?dab`ww^xy$x;LXLdEiWoUXFI++}l|#^SdOR#2H)@n-?AQ zCq3($KOn5CxGz?HGAD*je8=nBv6cWqdo)`x9>W}D@3dxDFThTbc{YblBzE4cwp5Xn z|!r*qOpnJ4ltS?m<%}Zzg;w zVyaU&sROp$h)0m|6m#DT;DCx`B0Hmmp_o;Cnu=6lnnst6P#r;o!2!F?{#&ODPy z9#wIeX!liW42SuyyWX|iA?Dxi@im2`XScjeF}xMBH@PI&X=@Y@9b%`fs?pIADM%$D zJ0k;U+cJ9RuISiB(`X;A(uA?H4ZK-)U!?WD$}F?_l`RgC541&#I-O3HI!O;O<|HlL zuE9e0j@fvjr`J%l%8`BTZ^q-&vb=dCW4Y#Ww4k}rkjxLqdHBjc2`;G2VW^>JP%D*o zW~i3Li~=H?i^ND;p>CwaZ#waxIBa>rsp1pGCMv9XW%FDb?bU1e``P%ovY7BhHPtN$ zYL_2*@H4D3y%2CCYR_R1+wMCeelU{DyYJk8Y_9I35xRveiA$~L9bBTBsrQ49dE+cWJ1(}JvqR9ITW0L@BoC8$n~h5uZ2osUEu{^ za;Q#ej;NGRS%U%*-n|0WrS8&|SX{pgd0J%iNs%+J-j>I^f+$}B@cghL=>cE5(Qh69 zF1^f@Jvah4NMAgJ8{11fnRCl^5tj$;_pZ!s2v4Z(-Rc0*$(Gw|dApX5`CI0$@%A6=>=n*4_Y^Ud(F+NW?iJpUX zQOUyK#(pcP+l}dCTJ$HwP>10t}Nn5-6j4_nLpQY*%%lrI?)%~{R zwPnGNQm<{tr}_2yL*egf*atGl0sSvmJW@ID9Zw(!6L)?0+pazgm`%)o`Z|@%1l1!> zSw!Qud4%7_`^vN;0DD}{drz5-5%%Za-8 zuSBDlmlFINwT4qhcpfB@O4Dnrmzf*Zv-d$)=?l+Mrme*=`!dHb14y~>e1d}&BsXe9 zcPXKK+?Uy|*Iv&RQ#-BA@lT-KcGK3*ct5<{c1-@?Znj%>v(KRhb4|M37a2z{qbxQz z+GlJ98?dhceG2bbvU|dZLxJ7H8$a*&q=I&zHFcndMuSSMLU(7Rh(NN#LWLO24W*(M(h2999XY^9JcFohRY$p&xi0to}FmAzZprMw!*PotM| z^-1r+fs4^gKdAZRtTqO6j#FN)+qo|-efCuLPue*z_#oGb{wb#ghJ-_tcXj@$N7!q= zlARy?T?+Z*4;Ke8tJTTvg!Wrib`BoBI(u0PzG4q4>B|Qi`^bAzPS-?H=oRxPSWOOK zRx5i~@=FCM4o?0led#q`;T}R85*CO*VUhJeb(BekV z8~9e%I(qb5`|eY0x0SH$f)Z(nDLDA#y*JBv*5T3*o%b$e#IC5Hq;AnI|C_^h z8+^*}{M*fO8+`f!ljSR{Q=hZpMAjXSXYjr8(%0g$E_0uVbG3p%EK6&t^$N)s%88kf zpAJNZC}`sDb1f&Os~B4nhS#T$jB^`4RiyXP{IWu~y4;tD9x3FyaA-S_$N;B}`a(qf z!4RCMy)JW~1W(54u1Kkyl0TLIw&em%c8sxz@Ba1$jDFnGqjzSRAidKn3%G6Py##iq z_#ZdAZe!C6)PD-Q_}2g8-(^m{#vMjZ^ETr=h0iJIKE^-taq;lHpZWx{r#gy(mk}}1 zvXp3!f2XGPbnG8JZ|L((M$vD2qI7Ot(1jIUr?N*w#)9Irk?mN=q(`ufU|79ja_hL> zB_%{dVIp+@FLuEh(BL0E-{td6b|2&a`T2yyEf71t4zfpu z_WquvOQ&` zAl)DBq_${vuoWV`ub6j@FaE}!$Sd~?Zk|9!AcBE}f);(8`pxOgkt&0NhpKpEG!nsT&Ru?xc@)2#?ha^BRn8GrdSs$3VOV_cLdA=1oh2%}>mN#4pLIEBoGBpEiq zQ^liYe#+_|g7!DEWi-*|KkA9Penbbs8$0nI$@ISs4in5LGjoVysiXUk&t~sO2tcE? z_mh-o6tcM!Rt$3+zVQVnoHSWK%su*>DJxWYJDNy>{~FY3{$k84nnsLneilDhpR8*} zW!UdMh?uI=V<#b}FKfxVa9oC>YChSBbidMU-g@8WTBMGn%VT^cOqT zFjb(GepDsVfFvf1rRSga_NJ$$6660>zcoymm?LV#q&3qKCC!O5z9~&RePiwT2qe|b zE**RCAd-rqZ%W+%5H|DwOg4#xf25oe?Z4L_o=SgCL1V&5ngR?$br6WLE420`KT-a} z-3nM_Q8=yUE3QgX5rt~SleRs2J+(kjaUIS;d&sVVWb>WGb45#g1!A6gBjVoH|{D8kYJOOXkUtD z8U5X(G_3;LL7H(i_n$PDO051SZD~+W>DYDKZ|5WfoN3)D<0`%Tnn>ynFy{H$vpTRX zu02hF!1D%H6|fdJy%V>`L>Q@FUX1O!Jb+p#9MY4B#w7ymPeruxcs1!b0f=ln;~ z?lwv!9Dg891-X}GrT3POg{upA!U1AXN#TbBuA@n6G(+-DqTbE5VjRtIxMj2xfq+^% z`|D3N$-h=HQidfU#B=gf!OPjHqOX+vAb^0%5Z5Z0>d(W9iMKG z|MRJeD01SAR1sYlQ#bbw{W3DF&+H4-=T}yQNfnS8=LUf(ju0h`J}2dLO@m;WcA`HK zAwfA*4VelEKO-?^Y9VQkNB`~%af*r=&REPSJp?>FmV}Rkv1-nMp}Ds+Kp$3p-2)li zO~F<`F2%tW&3{Yct2d&8t+$d$AoxGh2OQ0SN@MvB-Y$$OJMmCm0_79$d*cy!Y;$2z zK_HD80~Nd%l?;$Nj73xsNc~n*2d`o-n4Q>=1k9J4isMg^K+yyx9zyUKv|S`3Xt708 zBWSfxl!-^0p$g(x&N`u0? zIh-`|P8sr~<+aJa9qox!CRxG2nCT#w;wQFoP|7Sb4RHK7iw+P%8HzrvP9TaEq$)d- z7lm673m-;HiSs5XMbm}8WddWH>4;Df{KFuSzYXKy)??AW8B70@lyo>gyrriH<^4x= z(S?cDgEPT-nxaXvVP^lO3`-=?=KPQy;r9XN^HUGw;3YumRb~IT6$O@2AGX5)H$#CZ zn&M*NTJ~@@P$IisBs?8O{pz)Ed74u2|8R<;H<3c*jaOoDh%PKGll2H5ri{W06Zyi8 ztd9c2kt{+*C^3axO<7GV>#Zr>BEU?Nt&S}>%Dh_#dgyNWNQ8QwlZDnv>Q6DKB36e+Ya*o z|Bl4!>=@2_8<@8e9ggbgQj)h+<<$Rc{;%B>Q1&RVDVIb1!|dl(X;4yoo)n%wp)zuj Kn+4=``Tqgj2`pUz literal 0 HcmV?d00001 diff --git a/Windows/resource.h b/Windows/resource.h index c460f728f4..7a9c57097f 100644 --- a/Windows/resource.h +++ b/Windows/resource.h @@ -224,6 +224,24 @@ #define ID_FILE_LOAD_MEMSTICK 40143 #define ID_EMULATION_SOUND 40144 #define ID_OPTIONS_MIPMAP 40145 +#define IDB_IMAGE_PSP 40146 +#define IDC_EDIT_KEY_TURBO 40147 +#define IDC_EDIT_KEY_START 40148 +#define IDC_EDIT_KEY_SELECT 40149 +#define IDC_EDIT_KEY_RECTANGLE 40150 +#define IDC_EDIT_KEY_TRIANGLE 40151 +#define IDC_EDIT_KEY_CIRCLE 40152 +#define IDC_EDIT_KEY_CROSS 40153 +#define IDC_EDIT_KEY_LEFT_THUMB 40154 +#define IDC_EDIT_KEY_RIGHT_THUMB 40155 +#define IDC_EDIT_KEYUP 40156 +#define IDC_EDIT_KEYDOWN 40157 +#define IDC_EDIT_KEYLEFT 40158 +#define IDC_EDIT_KEYRIGHT 40159 +#define IDC_EDIT_KEY_ANALOG_UP 40160 +#define IDC_EDIT_KEY_ANALOG_DOWN 40161 +#define IDC_EDIT_KEY_ANALOG_LEFT 40162 +#define IDC_EDIT_KEY_ANALOG_RIGHT 40163 #define IDC_STATIC -1 // Next default values for new objects