From 0a6cb9a43cd1f2947ef200d031020a7b37677ac7 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 11:27:43 +0100 Subject: [PATCH 01/36] Patch --- Code/Game/GameClient/DanBiasGame_Impl.cpp | 33 ++++---- .../GameClientState/Buttons/EventButtonGUI.h | 4 +- .../GameClient/GameClientState/C_Object.cpp | 6 +- .../GameClient/GameClientState/C_Object.h | 78 ++++++++++++------- .../GameClientState/GameClientState.cpp | 4 +- .../GameClientState/GameClientState.h | 11 ++- .../GameClient/GameClientState/GameState.cpp | 14 ++-- .../GameClient/GameClientState/GameState.h | 4 +- .../GameClientState/LanMenuState.cpp | 12 +-- .../GameClient/GameClientState/LanMenuState.h | 4 +- .../GameClientState/LevelLoader/LevelLoader.h | 2 +- .../GameClientState/LevelLoader/LevelParser.h | 2 +- .../GameClientState/LevelLoader/Loader.h | 2 +- .../GameClientState/LobbyAdminState.cpp | 12 +-- .../GameClientState/LobbyAdminState.h | 4 +- .../GameClient/GameClientState/LobbyState.cpp | 12 +-- .../GameClient/GameClientState/LobbyState.h | 8 +- .../GameClient/GameClientState/MainState.cpp | 16 ++-- .../GameClient/GameClientState/MainState.h | 14 ++-- .../GameClientState/NetLoadState.cpp | 17 +++- .../GameClient/GameClientState/NetLoadState.h | 4 +- .../GameClientState/SharedStateContent.h | 28 +++++++ 22 files changed, 182 insertions(+), 109 deletions(-) create mode 100644 Code/Game/GameClient/GameClientState/SharedStateContent.h diff --git a/Code/Game/GameClient/DanBiasGame_Impl.cpp b/Code/Game/GameClient/DanBiasGame_Impl.cpp index 21d5589f..244568c2 100644 --- a/Code/Game/GameClient/DanBiasGame_Impl.cpp +++ b/Code/Game/GameClient/DanBiasGame_Impl.cpp @@ -18,12 +18,15 @@ #include "WinTimer.h" #include "vld.h" -#include "EventHandler/EventHandler.h" +#include "../Misc/EventHandler/EventHandler.h" + +#include "GameClientState\SharedStateContent.h" using namespace ::Oyster; using namespace ::Oyster::Event; using namespace ::Oyster::Network; using namespace ::Utility::DynamicMemory; +using namespace ::DanBias::Client; void ClientEventFunction( NetEvent e ); @@ -32,15 +35,17 @@ namespace DanBias #pragma region Game Data class DanBiasGamePrivateData { - public: WindowShell* window; - InputClass* inputObj; + InputClass inputObj; Utility::WinTimer timer; - UniquePointer state; - NetworkClient networkClient; - bool serverOwner; + UniquePointer state; + SharedStateContent sharedStateContent; + NetworkClient networkClient; + + + bool serverOwner; float capFrame; DanBiasGamePrivateData() @@ -72,10 +77,13 @@ namespace DanBias data.networkClient.SetMessagePump( ClientEventFunction ); + data.sharedStateContent.network = &data.networkClient; + data.sharedStateContent.input = &data.inputObj; + // Start in main menu state data.state = new Client::MainState(); - if( !data.state->Init( &data.networkClient ) ) + if( !data.state->Init( data.sharedStateContent ) ) return DanBiasClientReturn_Error; data.timer.reset(); @@ -140,8 +148,7 @@ namespace DanBias //------------------------------------------------------------------------------------- HRESULT DanBiasGame::InitInput() { - data.inputObj = new InputClass; - if(!data.inputObj->Initialize(data.window->GetHINSTANCE(), data.window->GetHWND(), data.window->GetHeight(), data.window->GetWidth())) + if(!data.inputObj.Initialize(data.window->GetHINSTANCE(), data.window->GetHWND(), data.window->GetHeight(), data.window->GetWidth())) { MessageBox(0, L"Could not initialize the input object.", L"Error", MB_OK); return E_FAIL; @@ -164,7 +171,7 @@ namespace DanBias float mouseNormalisedY = (float)(mousePos.y - windowVertex.top); mouseNormalisedY /= (float)(windowVertex.bottom - windowVertex.top); - data.inputObj->Update( mouseNormalisedX, mouseNormalisedY ); + data.inputObj.Update( mouseNormalisedX, mouseNormalisedY ); } if( data.serverOwner ) @@ -174,7 +181,7 @@ namespace DanBias DanBias::Client::GameClientState::ClientState state = DanBias::Client::GameClientState::ClientState_Same; - state = data.state->Update( deltaTime, data.inputObj ); + state = data.state->Update( deltaTime ); if( state != Client::GameClientState::ClientState_Same ) { @@ -217,7 +224,7 @@ namespace DanBias if( stateChanged ) { - data.state->Init( &data.networkClient ); // send game client + data.state->Init( data.sharedStateContent ); // send game client } } return Result_continue; @@ -235,8 +242,6 @@ namespace DanBias if( data.networkClient.IsConnected() ) data.networkClient.Disconnect(); - delete data.inputObj; - data.state = nullptr; EventHandler::Instance().Clean(); Graphics::API::Clean(); diff --git a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h index c770cb9c..d4981c23 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h @@ -5,8 +5,8 @@ #ifndef DANBIAS_CLIENT_EVENT_BUTTON_GUI_H #define DANBIAS_CLIENT_EVENT_BUTTON_GUI_H -#include "EventHandler/EventButton.h" -#include "DllInterfaces/GFXAPI.h" +#include "../Misc/EventHandler/EventButton.h" +#include "../OysterGraphics/DllInterfaces/GFXAPI.h" diff --git a/Code/Game/GameClient/GameClientState/C_Object.cpp b/Code/Game/GameClient/GameClientState/C_Object.cpp index d44d9201..92b55c53 100644 --- a/Code/Game/GameClient/GameClientState/C_Object.cpp +++ b/Code/Game/GameClient/GameClientState/C_Object.cpp @@ -100,5 +100,9 @@ void C_Object::Render() } void C_Object::Release() { - Oyster::Graphics::API::DeleteModel(model); + if( this->model ) + { + Oyster::Graphics::API::DeleteModel(model); + this->model = nullptr; + } } \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/C_Object.h b/Code/Game/GameClient/GameClientState/C_Object.h index ae9dc3a5..20e0eb60 100644 --- a/Code/Game/GameClient/GameClientState/C_Object.h +++ b/Code/Game/GameClient/GameClientState/C_Object.h @@ -16,37 +16,55 @@ namespace DanBias bool visible; }; -class C_Object -{ -private: - Oyster::Math::Float4x4 world; - Oyster::Math::Float3 position; - Oyster::Math::Quaternion rotation; - Oyster::Math::Float3 scale; + class C_Object + { + private: + Oyster::Math::Float4x4 world; + Oyster::Math::Float3 position; + Oyster::Math::Quaternion rotation; + Oyster::Math::Float3 scale; - int id; - void updateWorld(); -protected: - Oyster::Graphics::Model::Model *model; -public: - C_Object(); - virtual ~C_Object(); - virtual bool Init(ModelInitData modelInit); + int id; + void updateWorld(); + protected: + Oyster::Graphics::Model::Model *model; + public: + C_Object(); + virtual ~C_Object(); + virtual bool Init(ModelInitData modelInit); - void setWorld(Oyster::Math::Float4x4 world); - Oyster::Math::Float4x4 getWorld() const; - void setPos(Oyster::Math::Float3 newPos); - Oyster::Math::Float3 getPos() const; - void addPos(Oyster::Math::Float3 deltaPos); - void setRot(Oyster::Math::Quaternion newRot); - Oyster::Math::Quaternion getRotation() const; - void addRot(Oyster::Math::Quaternion deltaRot); - void setScale(Oyster::Math::Float3 newScale); - void addScale(Oyster::Math::Float3 deltaScale); - Oyster::Math::Float3 getScale() const; + void setWorld(Oyster::Math::Float4x4 world); + Oyster::Math::Float4x4 getWorld() const; + void setPos(Oyster::Math::Float3 newPos); + Oyster::Math::Float3 getPos() const; + void addPos(Oyster::Math::Float3 deltaPos); + void setRot(Oyster::Math::Quaternion newRot); + Oyster::Math::Quaternion getRotation() const; + void addRot(Oyster::Math::Quaternion deltaRot); + void setScale(Oyster::Math::Float3 newScale); + void addScale(Oyster::Math::Float3 deltaScale); + Oyster::Math::Float3 getScale() const; + + virtual void Render(); + virtual void Release(); + virtual int GetId() const; + }; + } +} + +#include "Utilities.h" + +namespace Utility { namespace DynamicMemory +{ + template<> + inline void SafeDeleteInstance( ::DanBias::Client::C_Object *dynamicInstance ) + { + if( dynamicInstance ) + { + dynamicInstance->Release(); + delete dynamicInstance; + } + } +} } - virtual void Render(); - virtual void Release(); - virtual int GetId() const; -};};}; #endif diff --git a/Code/Game/GameClient/GameClientState/GameClientState.cpp b/Code/Game/GameClient/GameClientState/GameClientState.cpp index 9db00f9d..dab88b2e 100644 --- a/Code/Game/GameClient/GameClientState/GameClientState.cpp +++ b/Code/Game/GameClient/GameClientState/GameClientState.cpp @@ -3,9 +3,9 @@ using namespace DanBias::Client; using namespace ::Oyster::Network; -GameClientState::GameClientState(void) {} +GameClientState::GameClientState() {} -GameClientState::~GameClientState(void) {} +GameClientState::~GameClientState() {} void GameClientState::DataRecieved( NetEvent e ) { /* do nothing */ } \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/GameClientState.h b/Code/Game/GameClient/GameClientState/GameClientState.h index 9317413e..3822c7b0 100644 --- a/Code/Game/GameClient/GameClientState/GameClientState.h +++ b/Code/Game/GameClient/GameClientState/GameClientState.h @@ -2,8 +2,7 @@ #define DANBIAS_CLIENT_GAMECLIENTSTATE_H #define NOMINMAX -#include "L_inputClass.h" -#include "NetworkClient.h" +#include "SharedStateContent.h" namespace DanBias { namespace Client { @@ -24,10 +23,10 @@ namespace DanBias { namespace Client }; public: - GameClientState(void); - virtual ~GameClientState(void); - virtual bool Init(Oyster::Network::NetworkClient* nwClient) = 0; - virtual ClientState Update(float deltaTime, InputClass* KeyInput) = 0; + GameClientState(); + virtual ~GameClientState(); + virtual bool Init( SharedStateContent &shared ) = 0; + virtual ClientState Update( float deltaTime ) = 0; virtual bool Render() = 0; virtual bool Release() = 0; virtual void ChangeState( ClientState next ) = 0; diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 66ca6c12..349eaaeb 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -15,9 +15,10 @@ struct GameState::MyData MyData(){} GameClientState::ClientState nextState; NetworkClient *nwClient; + InputClass *input; } privData; -GameState::GameState(void) +GameState::GameState() { key_forward = false; key_backward = false; @@ -25,24 +26,25 @@ GameState::GameState(void) key_strafeLeft = false; } -GameState::~GameState(void) +GameState::~GameState() { if( this->privData ) this->Release(); } -bool GameState::Init(NetworkClient* nwClient) +bool GameState::Init( SharedStateContent &shared ) { // load models privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->input = shared.input; LoadGame(); //tell server ready - nwClient->Send( GameLogic::Protocol_General_Status(GameLogic::Protocol_General_Status::States_ready) ); + this->privData->nwClient->Send( GameLogic::Protocol_General_Status(GameLogic::Protocol_General_Status::States_ready) ); return true; } @@ -180,7 +182,7 @@ void GameState::InitiatePlayer(int id, std::wstring modelName, Float4x4 world) camera.UpdateOrientation(); } -GameClientState::ClientState GameState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState GameState::Update( float deltaTime ) { //switch (privData->state) //{ diff --git a/Code/Game/GameClient/GameClientState/GameState.h b/Code/Game/GameClient/GameClientState/GameState.h index 6366bb8c..5a3b3c1a 100644 --- a/Code/Game/GameClient/GameClientState/GameState.h +++ b/Code/Game/GameClient/GameClientState/GameState.h @@ -25,8 +25,8 @@ namespace DanBias { namespace Client GameState(void); ~GameState(void); - bool Init(Oyster::Network::NetworkClient* nwClient); - GameClientState::ClientState Update(float deltaTime, InputClass* KeyInput) override; + bool Init( SharedStateContent &shared ); + GameClientState::ClientState Update( float deltaTime ) override; bool LoadModels(std::string mapFile); bool InitCamera(Oyster::Math::Float3 startPos) ; diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 6a836a36..7faf5d55 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -28,6 +28,7 @@ struct LanMenuState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; + InputClass *input; Graphics::API::Texture background; EventButtonCollection guiElements; @@ -46,12 +47,13 @@ LanMenuState::~LanMenuState() this->Release(); } -bool LanMenuState::Init(Network::NetworkClient* nwClient) +bool LanMenuState::Init( SharedStateContent &shared ) { this->privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->input = shared.input; this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); @@ -80,12 +82,12 @@ bool LanMenuState::Init(Network::NetworkClient* nwClient) return true; } -GameClientState::ClientState LanMenuState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState LanMenuState::Update( float deltaTime ) { MouseInput mouseState; { - KeyInput->GetMousePos( mouseState.x, mouseState.y ); - mouseState.mouseButtonPressed = KeyInput->IsMousePressed(); + this->privData->input->GetMousePos( mouseState.x, mouseState.y ); + mouseState.mouseButtonPressed = this->privData->input->IsMousePressed(); } EventHandler::Instance().Update( mouseState ); diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.h b/Code/Game/GameClient/GameClientState/LanMenuState.h index 8f3e8e67..57889eee 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.h +++ b/Code/Game/GameClient/GameClientState/LanMenuState.h @@ -14,8 +14,8 @@ namespace DanBias LanMenuState(); virtual ~LanMenuState(); - virtual bool Init(Oyster::Network::NetworkClient* nwClient); - virtual ClientState Update(float deltaTime, InputClass* KeyInput); + bool Init( SharedStateContent &shared ); + virtual ClientState Update( float deltaTime ); virtual bool Render(); virtual bool Release(); diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h b/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h index aa67c4f5..184a7005 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h @@ -7,7 +7,7 @@ #include #include -#include "Utilities.h" +#include "../Misc/Utilities.h" #include "ObjectDefines.h" namespace GameLogic diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h index 8f2a9150..346b75b5 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h @@ -4,7 +4,7 @@ #include #include #include "ObjectDefines.h" -#include "Utilities.h" +#include "../Misc/Utilities.h" namespace GameLogic { diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h b/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h index 0433194e..198c2a87 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h @@ -5,7 +5,7 @@ #ifndef LOADER_H #define LOADER_H -#include "Resource\OysterResource.h" +#include "..\Misc\Resource\OysterResource.h" #include namespace GameLogic diff --git a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp index c157226e..6cc1f15f 100644 --- a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp @@ -22,6 +22,7 @@ struct LobbyAdminState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; + InputClass *input; Graphics::API::Texture background; EventButtonCollection guiElements; } privData; @@ -36,12 +37,13 @@ LobbyAdminState::~LobbyAdminState(void) this->Release(); } -bool LobbyAdminState::Init(NetworkClient* nwClient) +bool LobbyAdminState::Init( SharedStateContent &shared ) { privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->input = shared.input; this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); @@ -57,7 +59,7 @@ bool LobbyAdminState::Init(NetworkClient* nwClient) return true; } -GameClientState::ClientState LobbyAdminState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState LobbyAdminState::Update( float deltaTime ) { // Wishlist: // picking @@ -70,8 +72,8 @@ GameClientState::ClientState LobbyAdminState::Update(float deltaTime, InputClass MouseInput mouseState; { - KeyInput->GetMousePos( mouseState.x, mouseState.y ); - mouseState.mouseButtonPressed = KeyInput->IsMousePressed(); + this->privData->input->GetMousePos( mouseState.x, mouseState.y ); + mouseState.mouseButtonPressed = this->privData->input->IsMousePressed(); } EventHandler::Instance().Update( mouseState ); diff --git a/Code/Game/GameClient/GameClientState/LobbyAdminState.h b/Code/Game/GameClient/GameClientState/LobbyAdminState.h index 06a9aced..49ae9274 100644 --- a/Code/Game/GameClient/GameClientState/LobbyAdminState.h +++ b/Code/Game/GameClient/GameClientState/LobbyAdminState.h @@ -24,8 +24,8 @@ namespace DanBias LobbyAdminState(); ~LobbyAdminState(); - bool Init( Oyster::Network::NetworkClient* nwClient ); - ClientState Update( float deltaTime, InputClass* KeyInput ); + bool Init( SharedStateContent &shared ); + ClientState Update( float deltaTime ); bool Render(); bool Release(); void ChangeState( ClientState next ); diff --git a/Code/Game/GameClient/GameClientState/LobbyState.cpp b/Code/Game/GameClient/GameClientState/LobbyState.cpp index 47a3cebb..6c5b2606 100644 --- a/Code/Game/GameClient/GameClientState/LobbyState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyState.cpp @@ -22,6 +22,7 @@ struct LobbyState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; + InputClass *input; Graphics::API::Texture background; EventButtonCollection guiElements; } privData; @@ -36,12 +37,13 @@ LobbyState::~LobbyState(void) this->Release(); } -bool LobbyState::Init(NetworkClient* nwClient) +bool LobbyState::Init( SharedStateContent &shared ) { privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->input = shared.input; this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); @@ -57,7 +59,7 @@ bool LobbyState::Init(NetworkClient* nwClient) return true; } -GameClientState::ClientState LobbyState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState LobbyState::Update( float deltaTime ) { // Wishlist: // picking @@ -70,8 +72,8 @@ GameClientState::ClientState LobbyState::Update(float deltaTime, InputClass* Key MouseInput mouseState; { - KeyInput->GetMousePos( mouseState.x, mouseState.y ); - mouseState.mouseButtonPressed = KeyInput->IsMousePressed(); + this->privData->input->GetMousePos( mouseState.x, mouseState.y ); + mouseState.mouseButtonPressed = this->privData->input->IsMousePressed(); } EventHandler::Instance().Update( mouseState ); diff --git a/Code/Game/GameClient/GameClientState/LobbyState.h b/Code/Game/GameClient/GameClientState/LobbyState.h index 7b6e5909..694aaa38 100644 --- a/Code/Game/GameClient/GameClientState/LobbyState.h +++ b/Code/Game/GameClient/GameClientState/LobbyState.h @@ -23,11 +23,11 @@ namespace DanBias class LobbyState : public GameClientState { public: - LobbyState(void); - ~LobbyState(void); + LobbyState(); + ~LobbyState(); - bool Init( Oyster::Network::NetworkClient* nwClient ); - ClientState Update( float deltaTime, InputClass* KeyInput ); + bool Init( SharedStateContent &shared ); + ClientState Update( float deltaTime ); bool Render(); bool Release(); void ChangeState( ClientState next ); diff --git a/Code/Game/GameClient/GameClientState/MainState.cpp b/Code/Game/GameClient/GameClientState/MainState.cpp index 81794252..1fd1d813 100644 --- a/Code/Game/GameClient/GameClientState/MainState.cpp +++ b/Code/Game/GameClient/GameClientState/MainState.cpp @@ -24,6 +24,7 @@ struct MainState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; + InputClass *input; Graphics::API::Texture background; EventButtonCollection guiElements; }; @@ -32,20 +33,21 @@ void OnButtonInteract_Create( Oyster::Event::ButtonEvent& e ); void OnButtonInteract_Join( Oyster::Event::ButtonEvent& e ); void OnButtonInteract_Quit( Oyster::Event::ButtonEvent& e ); -MainState::MainState(void) {} +MainState::MainState() {} -MainState::~MainState(void) +MainState::~MainState() { if( this->privData ) this->Release(); } -bool MainState::Init( NetworkClient* nwClient ) +bool MainState::Init( SharedStateContent &shared ) { this->privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->input = shared.input; this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); @@ -67,12 +69,12 @@ bool MainState::Init( NetworkClient* nwClient ) return true; } -GameClientState::ClientState MainState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState MainState::Update( float deltaTime ) { MouseInput mouseState; { - KeyInput->GetMousePos( mouseState.x, mouseState.y ); - mouseState.mouseButtonPressed = KeyInput->IsMousePressed(); + this->privData->input->GetMousePos( mouseState.x, mouseState.y ); + mouseState.mouseButtonPressed = this->privData->input->IsMousePressed(); } EventHandler::Instance().Update( mouseState ); diff --git a/Code/Game/GameClient/GameClientState/MainState.h b/Code/Game/GameClient/GameClientState/MainState.h index 7255e917..22589686 100644 --- a/Code/Game/GameClient/GameClientState/MainState.h +++ b/Code/Game/GameClient/GameClientState/MainState.h @@ -11,18 +11,18 @@ namespace DanBias { class MainState : public GameClientState { - private: - struct MyData; - ::Utility::DynamicMemory::UniquePointer privData; public: - MainState(void); - ~MainState(void); - bool Init( Oyster::Network::NetworkClient* nwClient ); - ClientState Update(float deltaTime, InputClass* KeyInput); + MainState(); + ~MainState(); + bool Init( SharedStateContent &shared ); + ClientState Update( float deltaTime ); bool Render(); bool Release(); void ChangeState( ClientState next ); + private: + struct MyData; + ::Utility::DynamicMemory::UniquePointer privData; }; } } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index c8fd1e64..ac7dd78b 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -13,6 +13,7 @@ struct NetLoadState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; + Graphics::API::Texture background; bool loading; }; @@ -24,28 +25,36 @@ NetLoadState::~NetLoadState(void) this->Release(); } -bool NetLoadState::Init( NetworkClient* nwClient ) +bool NetLoadState::Init( SharedStateContent &shared ) { this->privData = new MyData(); this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = nwClient; + this->privData->nwClient = shared.network; + this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); this->privData->loading = false; // we may assume that nwClient is properly connected to the server // signals querry to server for loading instructions - nwClient->Send( Protocol_QuerryGameType() ); + this->privData->nwClient->Send( Protocol_QuerryGameType() ); return true; } -GameClientState::ClientState NetLoadState::Update(float deltaTime, InputClass* KeyInput) +GameClientState::ClientState NetLoadState::Update( float deltaTime ) { return this->privData->nextState; } bool NetLoadState::Render() { + Graphics::API::NewFrame(); + Graphics::API::StartGuiRender(); + + Graphics::API::RenderGuiElement( this->privData->background, Float3(0.5f, 0.5f, 1.0f), Float2(1.0f) ); + + Graphics::API::EndFrame(); + return true; } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.h b/Code/Game/GameClient/GameClientState/NetLoadState.h index ff2d1acc..ea9f9f6a 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.h +++ b/Code/Game/GameClient/GameClientState/NetLoadState.h @@ -14,8 +14,8 @@ namespace DanBias NetLoadState( ); virtual ~NetLoadState( ); - bool Init( Oyster::Network::NetworkClient* nwClient ); - ClientState Update( float deltaTime, InputClass* KeyInput ); + bool Init( SharedStateContent &shared ); + ClientState Update( float deltaTime ); bool Render(); bool Release(); diff --git a/Code/Game/GameClient/GameClientState/SharedStateContent.h b/Code/Game/GameClient/GameClientState/SharedStateContent.h new file mode 100644 index 00000000..567be2fa --- /dev/null +++ b/Code/Game/GameClient/GameClientState/SharedStateContent.h @@ -0,0 +1,28 @@ +/******************************************************************** + * Created by Dan Andersson, 2014 + * Contains a shared memory struct. + * Whihc reference passed seamlessly between the game states + * at their Init calls. + ********************************************************************/ + +#ifndef SHAREDSTATECONTENT_H +#define SHAREDSTATECONTENT_H + +#include +#include "Utilities.h" +#include "C_Object.h" +#include "NetworkClient.h" +#include "L_inputClass.h" + +namespace DanBias { namespace Client +{ + struct SharedStateContent + { + public: + ::std::map> scene; + ::Oyster::Network::NetworkClient *network; + InputClass* input; + }; +} } + +#endif \ No newline at end of file From 752cb163caf00319a8c14f9c5a7fcbc7f4db5746 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 11:50:51 +0100 Subject: [PATCH 02/36] Fixed build errors in GameClient --- Code/Game/GameClient/DanBiasGame_Impl.cpp | 2 +- Code/Game/GameClient/GameClient.vcxproj | 18 ++++++++++++++---- Code/Game/GameClient/GameClient.vcxproj.user | 2 +- .../GameClientState/Buttons/EventButtonGUI.h | 6 ++---- .../GameClientState/LevelLoader/LevelLoader.h | 2 +- .../GameClientState/LevelLoader/LevelParser.h | 2 +- .../GameClientState/LevelLoader/Loader.h | 2 +- .../GameClientState/NetLoadState.cpp | 2 ++ 8 files changed, 23 insertions(+), 13 deletions(-) diff --git a/Code/Game/GameClient/DanBiasGame_Impl.cpp b/Code/Game/GameClient/DanBiasGame_Impl.cpp index 244568c2..392e917f 100644 --- a/Code/Game/GameClient/DanBiasGame_Impl.cpp +++ b/Code/Game/GameClient/DanBiasGame_Impl.cpp @@ -18,7 +18,7 @@ #include "WinTimer.h" #include "vld.h" -#include "../Misc/EventHandler/EventHandler.h" +#include "EventHandler/EventHandler.h" #include "GameClientState\SharedStateContent.h" diff --git a/Code/Game/GameClient/GameClient.vcxproj b/Code/Game/GameClient/GameClient.vcxproj index 0691fef1..a87f61e4 100644 --- a/Code/Game/GameClient/GameClient.vcxproj +++ b/Code/Game/GameClient/GameClient.vcxproj @@ -111,7 +111,7 @@ Windows true - Misc\Misc_$(PlatformShortName)D.lib;WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) + %(AdditionalDependencies) NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -128,7 +128,7 @@ Windows true - Misc\Misc_$(PlatformShortName)D.lib;WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) + %(AdditionalDependencies) NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -149,7 +149,7 @@ true true true - Misc\Misc_$(PlatformShortName).lib;WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) + %(AdditionalDependencies) NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) @@ -170,14 +170,23 @@ true true true - Misc\Misc_$(PlatformShortName).lib;WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) + %(AdditionalDependencies) NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) + + {7e3990d2-3d94-465c-b58d-64a74b3ecf9b} + {f10cbc03-9809-4cba-95d8-327c287b18ee} + + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} + + + {35aea3c0-e0a7-4e1e-88cd-514aa5a442b1} + {460d625f-2ac9-4559-b809-0ba89ceaedf4} @@ -233,6 +242,7 @@ + diff --git a/Code/Game/GameClient/GameClient.vcxproj.user b/Code/Game/GameClient/GameClient.vcxproj.user index 2e28d6f7..4b847ee6 100644 --- a/Code/Game/GameClient/GameClient.vcxproj.user +++ b/Code/Game/GameClient/GameClient.vcxproj.user @@ -1,7 +1,7 @@  - true + false $(OutDir) diff --git a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h index d4981c23..04af2e5a 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h @@ -5,10 +5,8 @@ #ifndef DANBIAS_CLIENT_EVENT_BUTTON_GUI_H #define DANBIAS_CLIENT_EVENT_BUTTON_GUI_H -#include "../Misc/EventHandler/EventButton.h" -#include "../OysterGraphics/DllInterfaces/GFXAPI.h" - - +#include "EventHandler/EventButton.h" +#include "DllInterfaces/GFXAPI.h" namespace DanBias { diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h b/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h index 184a7005..aa67c4f5 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/LevelLoader.h @@ -7,7 +7,7 @@ #include #include -#include "../Misc/Utilities.h" +#include "Utilities.h" #include "ObjectDefines.h" namespace GameLogic diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h index 346b75b5..8f2a9150 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.h @@ -4,7 +4,7 @@ #include #include #include "ObjectDefines.h" -#include "../Misc/Utilities.h" +#include "Utilities.h" namespace GameLogic { diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h b/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h index 198c2a87..0433194e 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h +++ b/Code/Game/GameClient/GameClientState/LevelLoader/Loader.h @@ -5,7 +5,7 @@ #ifndef LOADER_H #define LOADER_H -#include "..\Misc\Resource\OysterResource.h" +#include "Resource\OysterResource.h" #include namespace GameLogic diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index ac7dd78b..3463182e 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -1,9 +1,11 @@ #include "NetLoadState.h" #include "NetworkClient.h" +#include "OysterMath.h" #include "../Game/GameProtocols/Protocols.h" using namespace ::DanBias::Client; using namespace ::Oyster; +using namespace ::Oyster::Math; using namespace ::Oyster::Network; using namespace ::GameLogic; From e815f57238e681a3ec3f1194e6f9e213212eb775 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 12:02:18 +0100 Subject: [PATCH 03/36] minor edit --- Code/Game/GameClient/GameClientState/GameState.cpp | 4 ++++ Code/Game/GameClient/GameClientState/SharedStateContent.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 349eaaeb..1691a470 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -16,6 +16,10 @@ struct GameState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; InputClass *input; + + ::std::map> *staticObjects; + ::std::map> *dynamicObjects; + } privData; GameState::GameState() diff --git a/Code/Game/GameClient/GameClientState/SharedStateContent.h b/Code/Game/GameClient/GameClientState/SharedStateContent.h index 567be2fa..2fabb1ac 100644 --- a/Code/Game/GameClient/GameClientState/SharedStateContent.h +++ b/Code/Game/GameClient/GameClientState/SharedStateContent.h @@ -19,7 +19,8 @@ namespace DanBias { namespace Client struct SharedStateContent { public: - ::std::map> scene; + ::std::map> staticObjects; + ::std::map> dynamicObjects; ::Oyster::Network::NetworkClient *network; InputClass* input; }; From 0cb569fdb744faa693c0870ce13157b12da04020 Mon Sep 17 00:00:00 2001 From: lanariel Date: Mon, 17 Feb 2014 13:05:35 +0100 Subject: [PATCH 04/36] Color is now Float4 with RGBA --- .../GameClientState/Buttons/ButtonEllipse.h | 8 ++++---- .../GameClientState/Buttons/ButtonRectangle.h | 8 ++++---- .../GameClientState/Buttons/EventButtonGUI.h | 14 +++++++------- .../GameClient/GameClientState/Buttons/TextField.h | 4 ++-- .../GameClient/GameClientState/LanMenuState.cpp | 6 +++--- .../GameClient/GameClientState/LobbyAdminState.cpp | 2 +- .../Game/GameClient/GameClientState/LobbyState.cpp | 2 +- Code/Game/GameClient/GameClientState/MainState.cpp | 6 +++--- Code/OysterGraphics/DllInterfaces/GFXAPI.cpp | 4 ++-- Code/OysterGraphics/DllInterfaces/GFXAPI.h | 4 ++-- Code/OysterGraphics/Render/GuiRenderer.cpp | 8 ++++---- Code/OysterGraphics/Render/GuiRenderer.h | 4 ++-- Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl | 2 +- Code/OysterGraphics/Shader/Passes/2D/Header.hlsli | 2 +- 14 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h b/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h index 694683e7..7d9a9a5d 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h +++ b/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h @@ -21,19 +21,19 @@ namespace DanBias ButtonEllipse() : EventButtonGUI(), radius(0) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, + ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, + ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, + ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, + ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize) {} diff --git a/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h b/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h index 6afb77c1..f4dd69e1 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h +++ b/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h @@ -21,19 +21,19 @@ namespace DanBias ButtonRectangle() : EventButtonGUI(), width(0), height(0) {} - ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, + ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) {} - ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, + ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) {} - ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, + ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) {} - ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, + ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize) {} diff --git a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h index 04af2e5a..c6b54a7e 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h @@ -31,30 +31,30 @@ namespace DanBias { public: EventButtonGUI() - : EventButton(), pos(0, 0), size(0, 0), texture(NULL), buttonText(""), textColor(0, 0, 0) + : EventButton(), pos(0, 0), size(0, 0), texture(NULL), buttonText(""), textColor(1, 1, 1, 1) {} - EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, + EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButton(owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) { CreateTexture(textureName); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } - EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, + EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) { CreateTexture(textureName); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } - EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, + EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) { CreateTexture(textureName); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } - EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) + EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) : EventButton(func, owner, userData), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) { CreateTexture(textureName); @@ -77,7 +77,7 @@ namespace DanBias if(EventButton::Enabled()) { // let the using dev decide what is rendered - Oyster::Graphics::API::RenderGuiElement(texture, pos, size, Oyster::Math::Float3(1.0f, 1.0f, 1.0f)); + Oyster::Graphics::API::RenderGuiElement(texture, pos, size, Oyster::Math::Float4(1.0f, 1.0f, 1.0f, 1.0f)); //Render att xPos and yPos //With width and height @@ -125,7 +125,7 @@ namespace DanBias Oyster::Graphics::API::Texture texture; std::wstring buttonText; - Oyster::Math::Float3 textColor; + Oyster::Math::Float4 textColor; }; } } diff --git a/Code/Game/GameClient/GameClientState/Buttons/TextField.h b/Code/Game/GameClient/GameClientState/Buttons/TextField.h index af9c4346..c1fa79ac 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/TextField.h +++ b/Code/Game/GameClient/GameClientState/Buttons/TextField.h @@ -20,7 +20,7 @@ namespace DanBias { namespace Client { public: TextField(); - TextField( ::std::wstring backgroundTexture, ::Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height ); + TextField( ::std::wstring backgroundTexture, ::Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height ); virtual ~TextField(); virtual void RenderText(); @@ -62,7 +62,7 @@ namespace DanBias { namespace Client } template - TextField::TextField( ::std::wstring backgroundTexture, ::Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize ) + TextField::TextField( ::std::wstring backgroundTexture, ::Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize ) : ButtonRectangle( backgroundTexture, L"", textColor, owner, pos, size, resize ) { this->fontHeight = 0.025f; diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 7faf5d55..3051c097 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -58,7 +58,7 @@ bool LanMenuState::Init( SharedStateContent &shared ) this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); // create guiElements - this->privData->connectIP = new TextField( L"earth_md.png", Float3(1.0f), this, Float3(0.5f, 0.3f, 0.5f), Float2(0.8f, 0.09f), ResizeAspectRatio_None ); + this->privData->connectIP = new TextField( L"earth_md.png", Float4(1.0f), this, Float3(0.5f, 0.3f, 0.5f), Float2(0.8f, 0.09f), ResizeAspectRatio_None ); this->privData->connectIP->ReserveLines( 1 ); this->privData->connectIP->AppendText( L"127.0.0.1" ); this->privData->connectIP->SetFontHeight( 0.08f ); @@ -68,10 +68,10 @@ bool LanMenuState::Init( SharedStateContent &shared ) this->privData->guiElements.AddButton( this->privData->connectIP ); ButtonRectangle *guiElements; - guiElements = new ButtonRectangle( L"earth_md.png", L"Connect", Float3(1.0f), OnButtonInteract_Connect, this, Float3(0.5f, 0.4f, 0.5f), Float2(0.3f, 0.05f), ResizeAspectRatio_None ); + guiElements = new ButtonRectangle( L"earth_md.png", L"Connect", Float4(1.0f), OnButtonInteract_Connect, this, Float3(0.5f, 0.4f, 0.5f), Float2(0.3f, 0.05f), ResizeAspectRatio_None ); this->privData->guiElements.AddButton( guiElements ); - guiElements = new ButtonRectangle( L"earth_md.png", L"Exit", Float3(1.0f), OnButtonInteract_Exit, this, Float3(0.5f, 0.5f, 0.5f), Float2(0.3f, 0.05f), ResizeAspectRatio_None ); + guiElements = new ButtonRectangle( L"earth_md.png", L"Exit", Float4(1.0f), OnButtonInteract_Exit, this, Float3(0.5f, 0.5f, 0.5f), Float2(0.3f, 0.05f), ResizeAspectRatio_None ); this->privData->guiElements.AddButton( guiElements ); // bind guiElements collection to the singleton eventhandler diff --git a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp index 6cc1f15f..b05e90dc 100644 --- a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp @@ -50,7 +50,7 @@ bool LobbyAdminState::Init( SharedStateContent &shared ) // create buttons ButtonRectangle *button; - button = new ButtonRectangle( L"earth_md.png", L"Ready", Float3(1.0f), OnButtonInteract_Ready, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); + button = new ButtonRectangle( L"earth_md.png", L"Ready", Float4(1.0f), OnButtonInteract_Ready, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); this->privData->guiElements.AddButton( button ); // bind button collection to the singleton eventhandler diff --git a/Code/Game/GameClient/GameClientState/LobbyState.cpp b/Code/Game/GameClient/GameClientState/LobbyState.cpp index 6c5b2606..23b27e3f 100644 --- a/Code/Game/GameClient/GameClientState/LobbyState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyState.cpp @@ -50,7 +50,7 @@ bool LobbyState::Init( SharedStateContent &shared ) // create buttons ButtonRectangle *button; - button = new ButtonRectangle( L"earth_md.png", L"Ready", Float3(1.0f), OnButtonInteract_Ready, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); + button = new ButtonRectangle( L"earth_md.png", L"Ready", Float4(1.0f), OnButtonInteract_Ready, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); this->privData->guiElements.AddButton( button ); // bind button collection to the singleton eventhandler diff --git a/Code/Game/GameClient/GameClientState/MainState.cpp b/Code/Game/GameClient/GameClientState/MainState.cpp index 1fd1d813..d71b050e 100644 --- a/Code/Game/GameClient/GameClientState/MainState.cpp +++ b/Code/Game/GameClient/GameClientState/MainState.cpp @@ -54,13 +54,13 @@ bool MainState::Init( SharedStateContent &shared ) // create buttons ButtonRectangle *button; - button = new ButtonRectangle( L"earth_md.png", L"Create", Float3(1.0f), OnButtonInteract_Create, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); + button = new ButtonRectangle( L"earth_md.png", L"Create", Float4(1.0f), OnButtonInteract_Create, this, Float3(0.5f, 0.2f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); this->privData->guiElements.AddButton( button ); - button = new ButtonRectangle( L"skysphere_md.png", L"Join", Float3(1.0f), OnButtonInteract_Join, this, Float3(0.5f, 0.4f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); + button = new ButtonRectangle( L"skysphere_md.png", L"Join", Float4(1.0f), OnButtonInteract_Join, this, Float3(0.5f, 0.4f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); this->privData->guiElements.AddButton( button ); - button = new ButtonRectangle( L"plane_texture_md.png", L"Quit", Float3(1.0f), OnButtonInteract_Quit, this, Float3(0.5f, 0.8f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); + button = new ButtonRectangle( L"plane_texture_md.png", L"Quit", Float4(1.0f), OnButtonInteract_Quit, this, Float3(0.5f, 0.8f, 0.5f), Float2(0.3f, 0.1f), ResizeAspectRatio_Width ); this->privData->guiElements.AddButton( button ); // bind button collection to the singleton eventhandler diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index f3bd12fd..f4ce303f 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -161,7 +161,7 @@ namespace Oyster Render::Gui::Begin2DRender(); } - void API::RenderGuiElement(API::Texture tex, Math::Float3 pos, Math::Float2 size, Math::Float3 color) + void API::RenderGuiElement(API::Texture tex, Math::Float3 pos, Math::Float2 size, Math::Float4 color) { Render::Gui::Render((ID3D11ShaderResourceView*)tex,pos,size,color); } @@ -196,7 +196,7 @@ namespace Oyster Render::Gui::Begin2DTextRender(); } - void API::RenderText(std::wstring text, Math::Float3 Pos, Math::Float2 Size, float FontSize, Math::Float3 color) + void API::RenderText(std::wstring text, Math::Float3 Pos, Math::Float2 Size, float FontSize, Math::Float4 color) { Render::Gui::RenderText(text, Pos, Size, FontSize, color); } diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.h b/Code/OysterGraphics/DllInterfaces/GFXAPI.h index e2cea318..eea53939 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.h +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.h @@ -57,13 +57,13 @@ namespace Oyster static void StartGuiRender(); //! @brief Renders a single GUI element using the texture provided and the Pos in the center, %based system - static void RenderGuiElement(Texture, Math::Float3 Pos, Math::Float2 Size, Math::Float3 Color = Math::Float3(1,1,1)); + static void RenderGuiElement(Texture, Math::Float3 Pos, Math::Float2 Size, Math::Float4 Color = Math::Float4(1,1,1,1)); //! @brief Configures Renderer to process 2D Text, data will be passed in to EndFrame() static void StartTextRender(); //! @brief Renders a single GUI string using the texture provided and the Pos in the center, %based system - static void RenderText(std::wstring, Math::Float3 Pos, Math::Float2 Size, float FontSize, Math::Float3 Color = Math::Float3(1,1,1)); + static void RenderText(std::wstring, Math::Float3 Pos, Math::Float2 Size, float FontSize, Math::Float4 Color = Math::Float4(1,1,1,1)); //! @brief Performs light calculations, post effects and presents the scene static void EndFrame(); diff --git a/Code/OysterGraphics/Render/GuiRenderer.cpp b/Code/OysterGraphics/Render/GuiRenderer.cpp index 8eda0bf5..b17fdfef 100644 --- a/Code/OysterGraphics/Render/GuiRenderer.cpp +++ b/Code/OysterGraphics/Render/GuiRenderer.cpp @@ -16,7 +16,7 @@ namespace Oyster Core::PipelineManager::SetRenderPass(Render::Resources::Gui::Pass); } - void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float3 pos, Math::Float2 size, Math::Float3 color) + void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float3 pos, Math::Float2 size, Math::Float4 color) { Core::deviceContext->PSSetShaderResources(0,1,&tex); @@ -37,7 +37,7 @@ namespace Oyster Render::Resources::Gui::Data.Unmap(); data = Render::Resources::Color.Map(); - memcpy(data,&color,sizeof(Math::Float3)); + memcpy(data,&color,sizeof(Math::Float4)); Render::Resources::Color.Unmap(); @@ -50,7 +50,7 @@ namespace Oyster Core::PipelineManager::SetRenderPass(Resources::Gui::Text::Pass); } - void Gui::RenderText(std::wstring text, Math::Float3 pos, Math::Float2 size, float FontSize, Math::Float3 color) + void Gui::RenderText(std::wstring text, Math::Float3 pos, Math::Float2 size, float FontSize, Math::Float4 color) { //size.x = size.x / (text.length() * TEXT_SPACING /2); @@ -81,7 +81,7 @@ namespace Oyster Definitions::Text2D tmpInst; data = Render::Resources::Color.Map(); - memcpy(data,&color,sizeof(Math::Float3)); + memcpy(data,&color,sizeof(Math::Float4)); Render::Resources::Color.Unmap(); void* dest = Resources::Gui::Text::Vertex.Map(); diff --git a/Code/OysterGraphics/Render/GuiRenderer.h b/Code/OysterGraphics/Render/GuiRenderer.h index 3e4a8de0..64d6fdd3 100644 --- a/Code/OysterGraphics/Render/GuiRenderer.h +++ b/Code/OysterGraphics/Render/GuiRenderer.h @@ -12,9 +12,9 @@ namespace Oyster { public: static void Begin2DRender(); - static void Render(ID3D11ShaderResourceView* tex, Math::Float3 pos, Math::Float2 size, Math::Float3 tint = Math::Float3(1,1,1)); + static void Render(ID3D11ShaderResourceView* tex, Math::Float3 pos, Math::Float2 size, Math::Float4 tint = Math::Float4(1,1,1,1)); static void Begin2DTextRender(); - static void RenderText(std::wstring text, Math::Float3 pos, Math::Float2 size, float FontSize, Math::Float3 tint = Math::Float3(1,1,1)); + static void RenderText(std::wstring text, Math::Float3 pos, Math::Float2 size, float FontSize, Math::Float4 tint = Math::Float4(1,1,1,1)); }; } } diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl index c28fd642..0c8d3c68 100644 --- a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl +++ b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl @@ -2,5 +2,5 @@ float4 main(Pixel2DIn input) : SV_Target0 { - return Material.Sample(LinearSampler,input.Uv) * float4(Color,1); + return Material.Sample(LinearSampler,input.Uv) * Color; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli index 4b507644..f84483f5 100644 --- a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli +++ b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli @@ -10,7 +10,7 @@ cbuffer EveryObject2D : register(b0) cbuffer ColorData : register(b0) { - float3 Color; + float4 Color; }; struct Pixel2DIn From b0aea19b8a664207c78a09a8868c887defcfd4c8 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 14:33:11 +0100 Subject: [PATCH 05/36] Bunch of implementations --- .../GameClient/GameClientState/GameState.cpp | 413 ++++++------------ .../GameClient/GameClientState/GameState.h | 29 +- .../GameClientState/LanMenuState.cpp | 4 +- .../GameClientState/NetLoadState.cpp | 89 +++- .../GameClientState/SharedStateContent.h | 6 +- 5 files changed, 234 insertions(+), 307 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 1691a470..29cfec03 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -5,10 +5,16 @@ #include "Camera_FPS.h" #include +#include "C_obj/C_Player.h" +#include "C_obj/C_DynamicObj.h" +#include "C_obj/C_StaticObj.h" + using namespace ::DanBias::Client; using namespace ::Oyster; using namespace ::Oyster::Network; using namespace ::Oyster::Math3D; +using namespace ::GameLogic; +using namespace ::Utility::DynamicMemory; struct GameState::MyData { @@ -17,17 +23,26 @@ struct GameState::MyData NetworkClient *nwClient; InputClass *input; - ::std::map> *staticObjects; - ::std::map> *dynamicObjects; + ::std::map> *staticObjects; + ::std::map> *dynamicObjects; + + bool key_forward; + bool key_backward; + bool key_strafeRight; + bool key_strafeLeft; + bool key_Shoot; + bool key_Jump; + + C_Player player; + Camera_FPS camera; + + int myId; } privData; GameState::GameState() { - key_forward = false; - key_backward = false; - key_strafeRight = false; - key_strafeLeft = false; + this->privData = nullptr; } GameState::~GameState() @@ -38,202 +53,69 @@ GameState::~GameState() bool GameState::Init( SharedStateContent &shared ) { - // load models - privData = new MyData(); + // we may assume that shared.network is properly connected + // and there is content in shared.dynamicObjects and shared.staticObjects + + this->privData = new MyData(); + + this->privData->key_forward = false; + this->privData->key_backward = false; + this->privData->key_strafeRight = false; + this->privData->key_strafeLeft = false; this->privData->nextState = GameClientState::ClientState_Same; this->privData->nwClient = shared.network; this->privData->input = shared.input; - - LoadGame(); + this->privData->staticObjects = &shared.staticObjects; + this->privData->dynamicObjects = &shared.dynamicObjects; //tell server ready - this->privData->nwClient->Send( GameLogic::Protocol_General_Status(GameLogic::Protocol_General_Status::States_ready) ); + this->privData->nwClient->Send( Protocol_General_Status(Protocol_General_Status::States_ready) ); return true; } -GameState::gameStateState GameState::LoadGame() +void GameState::InitiatePlayer( int id, std::wstring modelName, Float4x4 world ) { - - return gameStateState_playing; -} - -bool GameState::LoadModels(std::string mapFile) -{ - GameLogic::LevelLoader levelLoader; - std::vector> objects; - objects = levelLoader.LoadLevel(mapFile); - - int objCount = objects.size(); - int modelId = 0; - ModelInitData modelData; - for (int i = 0; i < objCount; i++) - { - GameLogic::ObjectTypeHeader* obj = objects.at(i); - - switch (obj->typeID) - { - case GameLogic::ObjectType::ObjectType_LevelMetaData: - - break; - case GameLogic::ObjectType::ObjectType_Static: - { - GameLogic::ObjectHeader* staticObjData = ((GameLogic::ObjectHeader*)obj); - - modelData.modelPath.assign(staticObjData->ModelFile.begin(), staticObjData->ModelFile.end()); - modelData.visible = true; - //modelData.position = ; - //modelData.rotation = Quaternion(Float3(2,2,-2), 1); - //modelData.scale = Float3(2,2,2); - modelData.id = modelId++; - - this->staticObjects.Push(new C_StaticObj()); - this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData); - } - break; - case GameLogic::ObjectType::ObjectType_Dynamic: - { - GameLogic::ObjectHeader* dynamicObjData = ((GameLogic::ObjectHeader*)obj); - //modelData.position = ; - //modelData.rotation = Quaternion(Float3(2,2,-2), 1); - //modelData.scale = Float3(2,2,2); - modelData.modelPath.assign(dynamicObjData->ModelFile.begin(), dynamicObjData->ModelFile.end()); - modelData.visible = true; - modelData.id = modelId++; - - this->dynamicObjects.Push(new C_DynamicObj()); - this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); - } - break; - case GameLogic::ObjectType::ObjectType_Light: - { - GameLogic::BasicLight* lightData = ((GameLogic::BasicLight*)obj); - - switch( lightData->lightType ) - { - case GameLogic::LightType_PointLight: - { - //Oyster::Graphics::Definitions::Pointlight plight; - //plight.Pos = ((GameLogic::PointLight*)lightData)->position; - //plight.Color = lightData->diffuseColor; - //plight.Radius = 100; - //plight.Bright = 0.9f; - //Oyster::Graphics::API::AddLight(plight); - } - break; - default: break; - } - } - break; - default: - break; - } - } - myId += modelId++; - // add player model - //modelData.position = ; - //modelData.rotation = Quaternion(Float3(2,2,-2), 1); - //modelData.scale = Float3(2,2,2); - - - modelData.visible = true; - modelData.modelPath = L"char_still_sizeref.dan"; - modelData.id = myId; - // load models - this->dynamicObjects.Push(new C_DynamicObj()); - this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); - - /*C_Player* obj = new C_Player(); - privData->object.push_back(obj); - privData->object[privData->object.size() -1 ]->Init(modelData); - */ - return true; - -} - -bool GameState::InitCamera(Float3 startPos) -{ - camera.SetHeadOffset( Float3(0.0f, 1.0f, 1.0f) ); - camera.SetPerspectiveProjection( pi / 4.0f, 1024.0f/768.0f, 1.0f, 1000.0f ); - camera.UpdateOrientation(); - Oyster::Graphics::API::SetProjection(camera.GetProjectionMatrix()); - - return true; -} - -void GameState::InitiatePlayer(int id, std::wstring modelName, Float4x4 world) -{ - myId = id; + this->privData->myId = id; ModelInitData modelData; - C_Object* obj; modelData.visible = true; - //modelData.world = world; modelData.position = Float3(world[12], world[13], world[14]); modelData.rotation = Quaternion(Float3(0,0,0), 1); modelData.scale = Float3(1,1,1); modelData.modelPath = modelName; - modelData.id = myId; - - obj = new C_Player(); - this->dynamicObjects.Push(obj); - this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); + modelData.id = this->privData->myId; + this->privData->player.Init( modelData ); - Float3 pos = Float3(world[12], world[13], world[14]); - - camera.SetPosition( pos ); - camera.UpdateOrientation(); + this->privData->camera.SetPosition( this->privData->player.getPos() ); + this->privData->camera.UpdateOrientation(); } GameClientState::ClientState GameState::Update( float deltaTime ) { - //switch (privData->state) - //{ - //case gameStateState_loading: //Will this ever happen in this scope?? - // { - // // load map - // // wait for all players - // LoadGame(); - // GameLogic::Protocol_General_Status gameStatus; - // gameStatus.status = GameLogic::Protocol_General_Status::States_ready; - // privData->nwClient->Send(gameStatus); - // privData->state = gameStateState_playing; - // } - // break; - //case gameStateState_playing: - // // read server data - // // update objects - // { - // readKeyInput(KeyInput); - // camera.UpdateOrientation(); - // } - // break; - //case gameStateState_end: - // return ClientState_Lobby; - // break; - //default: - // break; - //} - // - //// send key input to server. - //return ClientState_Same; - return this->privData->nextState; } bool GameState::Render() { - Oyster::Graphics::API::SetView( camera.GetViewMatrix() ); + Oyster::Graphics::API::SetView( this->privData->camera.GetViewMatrix() ); Oyster::Graphics::API::NewFrame(); - for (unsigned int i = 0; i < staticObjects.Size(); i++) + + // for debugging to be replaced with render weapon + this->privData->player.Render(); + + auto staticObject = this->privData->staticObjects->begin(); + for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) { - staticObjects[i]->Render(); + staticObject->second->Render(); } - for (unsigned int i = 0; i < dynamicObjects.Size(); i++) + + auto dynamicObject = this->privData->dynamicObjects->begin(); + for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) { - dynamicObjects[i]->Render(); + dynamicObject->second->Render(); } Oyster::Graphics::API::EndFrame(); @@ -242,8 +124,25 @@ bool GameState::Render() bool GameState::Release() { + if( privData ) + { + auto staticObject = this->privData->staticObjects->begin(); + for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) + { + staticObject->second = nullptr; + } - privData = NULL; + auto dynamicObject = this->privData->dynamicObjects->begin(); + for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) + { + dynamicObject->second = nullptr; + } + + this->privData->staticObjects->clear(); + this->privData->dynamicObjects->clear(); + + privData = NULL; + } return true; } @@ -252,138 +151,119 @@ void GameState::ChangeState( ClientState next ) this->privData->nextState = next; } -void GameState::readKeyInput(InputClass* KeyInput) +void GameState::ReadKeyInput() { - if(KeyInput->IsKeyPressed(DIK_W)) + if( this->privData->input->IsKeyPressed(DIK_W) ) { - if(!key_forward) + if(!this->privData->key_forward) { - privData->nwClient->Send(GameLogic::Protocol_PlayerMovementForward()); - key_forward = true; + this->privData->nwClient->Send( Protocol_PlayerMovementForward() ); + this->privData->key_forward = true; } } else - key_forward = false; + this->privData->key_forward = false; - if(KeyInput->IsKeyPressed(DIK_S)) + if( this->privData->input->IsKeyPressed(DIK_S) ) { - if(!key_backward) + if( !this->privData->key_backward ) { - privData->nwClient->Send(GameLogic::Protocol_PlayerMovementBackward()); - key_backward = true; + this->privData->nwClient->Send( Protocol_PlayerMovementBackward() ); + this->privData->key_backward = true; } } else - key_backward = false; + this->privData->key_backward = false; - if(KeyInput->IsKeyPressed(DIK_A)) + if( this->privData->input->IsKeyPressed(DIK_A) ) { - if(!key_strafeLeft) + if( !this->privData->key_strafeLeft ) { - privData->nwClient->Send(GameLogic::Protocol_PlayerMovementLeft()); - key_strafeLeft = true; + this->privData->nwClient->Send( Protocol_PlayerMovementLeft() ); + this->privData->key_strafeLeft = true; } } else - key_strafeLeft = false; + this->privData->key_strafeLeft = false; - if(KeyInput->IsKeyPressed(DIK_D)) + if( this->privData->input->IsKeyPressed(DIK_D) ) { - if(!key_strafeRight) + if( !this->privData->key_strafeRight ) { - privData->nwClient->Send(GameLogic::Protocol_PlayerMovementRight()); - key_strafeRight = true; + this->privData->nwClient->Send( Protocol_PlayerMovementRight() ); + this->privData->key_strafeRight = true; } } else - key_strafeRight = false; + this->privData->key_strafeRight = false; //send delta mouse movement - //if (KeyInput->IsMousePressed()) { - camera.YawRight( -KeyInput->GetYaw() ); - camera.PitchUp( KeyInput->GetPitch() ); - camera.UpdateOrientation(); + this->privData->camera.YawRight( -this->privData->input->GetYaw() ); + this->privData->camera.PitchUp( this->privData->input->GetPitch() ); + this->privData->camera.UpdateOrientation(); - GameLogic::Protocol_PlayerLook playerLookDir; - Float4 look = camera.GetLook(); - - privData->nwClient->Send( playerLookDir ); + privData->nwClient->Send( Protocol_PlayerLook(this->privData->camera.GetLook(), this->privData->camera.GetRight()) ); } // shoot - if(KeyInput->IsKeyPressed(DIK_Z)) + if( this->privData->input->IsKeyPressed(DIK_Z) ) { - if(!key_Shoot) + if( !this->privData->key_Shoot ) { - GameLogic::Protocol_PlayerShot playerShot; + Protocol_PlayerShot playerShot; playerShot.primaryPressed = true; playerShot.secondaryPressed = false; playerShot.utilityPressed = false; - privData->nwClient->Send(playerShot); - key_Shoot = true; + this->privData->nwClient->Send( playerShot ); + this->privData->key_Shoot = true; } } else - key_Shoot = false; - if(KeyInput->IsKeyPressed(DIK_X)) + this->privData->key_Shoot = false; + if( this->privData->input->IsKeyPressed(DIK_X) ) { - if(!key_Shoot) + if( !this->privData->key_Shoot ) { - GameLogic::Protocol_PlayerShot playerShot; + Protocol_PlayerShot playerShot; playerShot.primaryPressed = false; playerShot.secondaryPressed = true; playerShot.utilityPressed = false; - privData->nwClient->Send(playerShot); - key_Shoot = true; + this->privData->nwClient->Send( playerShot ); + this->privData->key_Shoot = true; } } else - key_Shoot = false; - if(KeyInput->IsKeyPressed(DIK_C)) + this->privData->key_Shoot = false; + if( this->privData->input->IsKeyPressed(DIK_C) ) { - if(!key_Shoot) + if( !this->privData->key_Shoot ) { - GameLogic::Protocol_PlayerShot playerShot; + Protocol_PlayerShot playerShot; playerShot.primaryPressed = false; playerShot.secondaryPressed = false; playerShot.utilityPressed = true; - privData->nwClient->Send(playerShot); - key_Shoot = true; + this->privData->nwClient->Send( playerShot ); + this->privData->key_Shoot = true; } } else - key_Shoot = false; + this->privData->key_Shoot = false; // jump - if(KeyInput->IsKeyPressed(DIK_SPACE)) + if( this->privData->input->IsKeyPressed(DIK_SPACE) ) { - if(!key_Jump) + if(!this->privData->key_Jump) { - privData->nwClient->Send(GameLogic::Protocol_PlayerJump()); - key_Jump = true; + this->privData->nwClient->Send( Protocol_PlayerJump() ); + this->privData->key_Jump = true; } } else - key_Jump = false; + this->privData->key_Jump = false; - // send event data - // - //if(KeyInput->IsKeyPressed(DIK_L)) - // privData->state = GameState::gameStateState_end; -} - -using namespace ::Oyster::Network; -using namespace ::Utility::DynamicMemory; - -// returns -1 if none found -int FindObject( const DynamicArray> &collection, int id ) -{ - int num = collection.Size(); - for( int i = 0; i < num; ++i ) if( id == collection[i]->GetId() ) - return i; - return -1; + // TODO: implement sub-menu } void GameState::DataRecieved( NetEvent e ) @@ -400,76 +280,67 @@ void GameState::DataRecieved( NetEventmyId == decoded.object_ID ) - camera.SetPosition( decoded.position ); + if( this->privData->myId == decoded.object_ID ) + this->privData->camera.SetPosition( decoded.position ); - int i = FindObject( this->dynamicObjects, decoded.object_ID ); - if( i > -1 ) - this->dynamicObjects[i]->setPos( decoded.position ); + (*this->privData->dynamicObjects)[decoded.object_ID]->setPos( decoded.position ); } break; case protocol_Gameplay_ObjectScale: { - GameLogic::Protocol_ObjectScale decoded(data); - int i = FindObject( this->dynamicObjects, decoded.object_ID ); - if( i > -1 ) - this->dynamicObjects[i]->setScale( decoded.scale ); + Protocol_ObjectScale decoded(data); + (*this->privData->dynamicObjects)[decoded.object_ID]->setScale( decoded.scale ); } break; case protocol_Gameplay_ObjectRotation: { - GameLogic::Protocol_ObjectRotation decoded(data); + Protocol_ObjectRotation decoded(data); Quaternion rotation = Quaternion( Float3(decoded.rotationQ), decoded.rotationQ[3] ); // if is this player. Remember to change camera - if( this->myId == decoded.object_ID ) - camera.SetAngular( AngularAxis(rotation) ); + if( this->privData->myId == decoded.object_ID ) + this->privData->camera.SetAngular( AngularAxis(rotation) ); - int i = FindObject( this->dynamicObjects, decoded.object_ID ); - if( i > -1 ) - this->dynamicObjects[i]->setRot( rotation ); + (*this->privData->dynamicObjects)[decoded.object_ID]->setRot( rotation ); } break; case protocol_Gameplay_ObjectPositionRotation: { - GameLogic::Protocol_ObjectPositionRotation decoded(data); + Protocol_ObjectPositionRotation decoded(data); Float3 position = decoded.position; Quaternion rotation = Quaternion( Float3(decoded.rotationQ), decoded.rotationQ[3] ); // if is this player. Remember to change camera - if( this->myId == decoded.object_ID ) + if( this->privData->myId == decoded.object_ID ) { - camera.SetPosition( position ); - camera.SetAngular( AngularAxis(rotation) ); + this->privData->camera.SetPosition( position ); + this->privData->camera.SetAngular( AngularAxis(rotation) ); } - int i = FindObject( this->dynamicObjects, decoded.object_ID ); - if( i > -1 ) - { - this->dynamicObjects[i]->setPos( position ); - this->dynamicObjects[i]->setRot( rotation ); - } + C_DynamicObj *object = (*this->privData->dynamicObjects)[decoded.object_ID]; + object->setPos( position ); + object->setRot( rotation ); } break; case protocol_Gameplay_ObjectEnabled: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectDisabled: { - GameLogic::Protocol_ObjectDisable decoded(data); + Protocol_ObjectDisable decoded(data); - int i = FindObject( this->dynamicObjects, decoded.objectID ); - if( i > -1 ) + auto object = this->privData->dynamicObjects->find( decoded.objectID ); + if( object != this->privData->dynamicObjects->end() ) { - this->dynamicObjects[i].Release(); - this->dynamicObjects.Pop(i); + object->second = nullptr; + this->privData->dynamicObjects->erase( object ); } } break; case protocol_Gameplay_ObjectCreate: { - GameLogic::Protocol_ObjectCreate decoded(data); + Protocol_ObjectCreate decoded(data); C_DynamicObj* object = new C_DynamicObj(); ModelInitData modelData; @@ -484,7 +355,7 @@ void GameState::DataRecieved( NetEventInit(modelData); - dynamicObjects.Push(object); + (*this->privData->dynamicObjects)[decoded.object_ID] = object; } break; diff --git a/Code/Game/GameClient/GameClientState/GameState.h b/Code/Game/GameClient/GameClientState/GameState.h index 5a3b3c1a..29ea2f1e 100644 --- a/Code/Game/GameClient/GameClientState/GameState.h +++ b/Code/Game/GameClient/GameClientState/GameState.h @@ -4,13 +4,6 @@ #include "OysterMath.h" #include -#include "Camera_FPS.h" -#include "LevelLoader/LevelLoader.h" -#include "C_obj/C_Player.h" -#include "C_obj/C_DynamicObj.h" -#include "C_obj/C_StaticObj.h" -#include "DynamicArray.h" - namespace DanBias { namespace Client { class GameState : public GameClientState @@ -27,12 +20,8 @@ namespace DanBias { namespace Client ~GameState(void); bool Init( SharedStateContent &shared ); GameClientState::ClientState Update( float deltaTime ) override; - - bool LoadModels(std::string mapFile); - bool InitCamera(Oyster::Math::Float3 startPos) ; - void InitiatePlayer(int id, std::wstring modelName, Oyster::Math::Float4x4 world); - gameStateState LoadGame(); - void readKeyInput(InputClass* KeyInput); + void InitiatePlayer( int id, std::wstring modelName, Oyster::Math::Float4x4 world ); + void ReadKeyInput(); bool Render()override; bool Release()override; @@ -43,20 +32,6 @@ namespace DanBias { namespace Client private: struct MyData; ::Utility::DynamicMemory::UniquePointer privData; - - bool key_forward; - bool key_backward; - bool key_strafeRight; - bool key_strafeLeft; - bool key_Shoot; - bool key_Jump; - Camera_FPS camera; - - int myId; - - Utility::DynamicMemory::DynamicArray> staticObjects; - Utility::DynamicMemory::DynamicArray> dynamicObjects; - //Utility::DynamicMemory::DynamicArray> playObjects; }; } } #endif \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 3051c097..0615f209 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -123,8 +123,8 @@ void LanMenuState::ChangeState( ClientState next ) { case GameClientState::ClientState_Lobby: // attempt to connect to lobby - //if( !this->privData->nwClient->Connect(this->privData->connectPort, (*this->privData->connectIP)[0]) ) - // return; // TODO: temporary commented out + if( !this->privData->nwClient->Connect(this->privData->connectPort, (*this->privData->connectIP)[0]) ) + return; break; default: break; } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 3463182e..8274472d 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -1,13 +1,18 @@ #include "NetLoadState.h" #include "NetworkClient.h" #include "OysterMath.h" -#include "../Game/GameProtocols/Protocols.h" +#include "Protocols.h" +#include "LevelLoader\LevelLoader.h" +#include "Utilities.h" +#include "C_obj\C_StaticObj.h" +#include "C_obj\C_DynamicObj.h" using namespace ::DanBias::Client; using namespace ::Oyster; using namespace ::Oyster::Math; using namespace ::Oyster::Network; using namespace ::GameLogic; +using namespace ::Utility::String; struct NetLoadState::MyData { @@ -16,9 +21,17 @@ struct NetLoadState::MyData GameClientState::ClientState nextState; NetworkClient *nwClient; Graphics::API::Texture background; + ::std::map> *staticObjects; + ::std::map> *dynamicObjects; + bool loading; }; +inline Quaternion ArrayToQuaternion( float source[4] ) +{ + return Quaternion( Float3(source[0], source[1], source[2]), source[3] ); +} + NetLoadState::NetLoadState(void) {} NetLoadState::~NetLoadState(void) @@ -31,9 +44,12 @@ bool NetLoadState::Init( SharedStateContent &shared ) { this->privData = new MyData(); - this->privData->nextState = GameClientState::ClientState_Same; - this->privData->nwClient = shared.network; - this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); + this->privData->nextState = GameClientState::ClientState_Same; + this->privData->nwClient = shared.network; + this->privData->background = Graphics::API::CreateTexture( L"grass_md.png" ); + this->privData->dynamicObjects = &shared.dynamicObjects; + this->privData->staticObjects = &shared.staticObjects; + this->privData->loading = false; // we may assume that nwClient is properly connected to the server @@ -82,6 +98,7 @@ void NetLoadState::DataRecieved( NetEventprivData->loading ) { this->LoadGame( Protocol_LobbyCreateGame(e.args.data.protocol).modelName ); + this->ChangeState( ClientState_Game ); } } @@ -89,7 +106,69 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) { this->privData->loading = true; - // TODO: ask Sam about level loader + LevelLoader loader; + auto objects = loader.LoadLevel( fileName ); + auto object = objects.begin(); + ObjectHeader *oh; + + int objectID = 100; // first 100 is reserved for players. This is how the server does it. + + for( ; object != objects.end(); ++object ) + { + ++objectID; + oh = (ObjectHeader*)&*object; + switch( oh->typeID ) + { + case ObjectType::ObjectType_Static: + { + ModelInitData desc; + desc.id = objectID; + StringToWstring( oh->ModelFile, desc.modelPath ); + desc.position = oh->position; + desc.rotation = ArrayToQuaternion( oh->rotation ); + desc.scale = oh->scale; + desc.visible = true; + + C_StaticObj *staticObject = new C_StaticObj(); + if( staticObject->Init( desc ) ) + { + (*this->privData->staticObjects)[objectID] = staticObject; + } + else + { + delete staticObject; + } + } + break; + case ObjectType::ObjectType_Dynamic: + { + ModelInitData desc; + desc.id = objectID; + StringToWstring( oh->ModelFile, desc.modelPath ); + desc.position = oh->position; + desc.rotation = ArrayToQuaternion( oh->rotation ); + desc.scale = oh->scale; + desc.visible = true; + + C_DynamicObj *dynamicObject = new C_DynamicObj(); + if( dynamicObject->Init( desc ) ) + { + (*this->privData->dynamicObjects)[objectID] = dynamicObject; + } + else + { + delete dynamicObject; + } + } + break; + case ObjectType::ObjectType_Light: + { + /* TODO: implement light into the leveformat */ + } + break; + default: break; + } + } this->privData->nextState = ClientState::ClientState_Game; } diff --git a/Code/Game/GameClient/GameClientState/SharedStateContent.h b/Code/Game/GameClient/GameClientState/SharedStateContent.h index 2fabb1ac..da9dc759 100644 --- a/Code/Game/GameClient/GameClientState/SharedStateContent.h +++ b/Code/Game/GameClient/GameClientState/SharedStateContent.h @@ -11,6 +11,8 @@ #include #include "Utilities.h" #include "C_Object.h" +#include "C_obj\C_StaticObj.h" +#include "C_obj\C_DynamicObj.h" #include "NetworkClient.h" #include "L_inputClass.h" @@ -19,8 +21,8 @@ namespace DanBias { namespace Client struct SharedStateContent { public: - ::std::map> staticObjects; - ::std::map> dynamicObjects; + ::std::map> staticObjects; + ::std::map> dynamicObjects; ::Oyster::Network::NetworkClient *network; InputClass* input; }; From 43650befd65b20be547e3b744ef4df53a54b6f99 Mon Sep 17 00:00:00 2001 From: dean11 Date: Mon, 17 Feb 2014 15:11:12 +0100 Subject: [PATCH 06/36] GameServer - added more features to object protocols --- Code/Game/GameClient/GameClient.vcxproj.user | 2 +- Code/Game/GameLogic/GameLogic.vcxproj.user | 2 +- Code/Game/GameProtocols/ObjectProtocols.h | 54 +++++++++++++++---- .../GameServer/Implementation/GameLobby.cpp | 3 -- .../GameServer/Implementation/GameServer.cpp | 4 -- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/Code/Game/GameClient/GameClient.vcxproj.user b/Code/Game/GameClient/GameClient.vcxproj.user index 4b847ee6..2e28d6f7 100644 --- a/Code/Game/GameClient/GameClient.vcxproj.user +++ b/Code/Game/GameClient/GameClient.vcxproj.user @@ -1,7 +1,7 @@  - false + true $(OutDir) diff --git a/Code/Game/GameLogic/GameLogic.vcxproj.user b/Code/Game/GameLogic/GameLogic.vcxproj.user index 2e28d6f7..4b847ee6 100644 --- a/Code/Game/GameLogic/GameLogic.vcxproj.user +++ b/Code/Game/GameLogic/GameLogic.vcxproj.user @@ -1,7 +1,7 @@  - true + false $(OutDir) diff --git a/Code/Game/GameProtocols/ObjectProtocols.h b/Code/Game/GameProtocols/ObjectProtocols.h index 70e24883..e3449022 100644 --- a/Code/Game/GameProtocols/ObjectProtocols.h +++ b/Code/Game/GameProtocols/ObjectProtocols.h @@ -476,7 +476,21 @@ namespace GameLogic } Protocol_ObjectCreate( Oyster::Network::CustomNetProtocol& p ) { - /** @todo TODO: not implemented */ + this->object_ID = p[1].value.netInt; + this->name.assign(p[2].value.netCharPtr); + + this->position[0] = p[3].value.netFloat; + this->position[1] = p[4].value.netFloat; + this->position[2] = p[5].value.netFloat; + + this->rotationQ[0] = p[6].value.netFloat; + this->rotationQ[1] = p[7].value.netFloat; + this->rotationQ[2] = p[8].value.netFloat; + this->rotationQ[3] = p[9].value.netFloat; + + this->scale[0] = p[10].value.netFloat; + this->scale[1] = p[11].value.netFloat; + this->scale[2] = p[12].value.netFloat; } Protocol_ObjectCreate(float p[3], float r[4], float s[3], int id, char *path) { @@ -538,7 +552,7 @@ namespace GameLogic std::string name; std::string meshName; float position[3]; - float rotation[3]; + float rotationQ[4]; float scale[3]; Protocol_ObjectCreatePlayer() @@ -569,9 +583,25 @@ namespace GameLogic } Protocol_ObjectCreatePlayer(Oyster::Network::CustomNetProtocol& p) { + this->object_ID = p[1].value.netInt; + this->teamId = this->protocol[2].value.netInt; + this->name.assign(p[3].value.netCharPtr); + this->meshName.assign(p[4].value.netCharPtr); + + this->position[0] = p[5].value.netFloat; + this->position[1] = p[6].value.netFloat; + this->position[2] = p[7].value.netFloat; + this->rotationQ[0] = p[8].value.netFloat; + this->rotationQ[1] = p[9].value.netFloat; + this->rotationQ[2] = p[10].value.netFloat; + this->rotationQ[3] = p[11].value.netFloat; + + this->scale[0] = p[12].value.netFloat; + this->scale[1] = p[13].value.netFloat; + this->scale[2] = p[14].value.netFloat; } - Protocol_ObjectCreatePlayer(float position[3], float rotation[3], float scale[3], int ObjectID, int teamID, std::string name, std::string meshName) + Protocol_ObjectCreatePlayer(float position[3], float rotation[4], float scale[3], int ObjectID, int teamID, std::string name, std::string meshName) { this->protocol[0].value = protocol_Gameplay_ObjectCreatePlayer; this->protocol[0].type = Oyster::Network::NetAttributeType_Short; @@ -592,17 +622,18 @@ namespace GameLogic this->protocol[8].type = Oyster::Network::NetAttributeType_Float; this->protocol[9].type = Oyster::Network::NetAttributeType_Float; this->protocol[10].type = Oyster::Network::NetAttributeType_Float; - //SCALE this->protocol[11].type = Oyster::Network::NetAttributeType_Float; + //SCALE this->protocol[12].type = Oyster::Network::NetAttributeType_Float; this->protocol[13].type = Oyster::Network::NetAttributeType_Float; + this->protocol[14].type = Oyster::Network::NetAttributeType_Float; this->object_ID = ObjectID; this->teamId = teamID; this->name = name; this->meshName = meshName; memcpy(&this->position[0], &position[0], sizeof(float)*3); - memcpy(&this->rotation[0], &rotation[0], sizeof(float)*3); + memcpy(&this->rotationQ[0], &rotation[0], sizeof(float)*4); memcpy(&this->scale[0], &scale[0], sizeof(float)*3); } Oyster::Network::CustomNetProtocol GetProtocol() override @@ -618,13 +649,14 @@ namespace GameLogic this->protocol[6].value = this->position[1]; this->protocol[7].value = this->position[2]; //ROTATION - this->protocol[8].value = this->rotation[0]; - this->protocol[9].value = this->rotation[1]; - this->protocol[10].value = this->rotation[2]; + this->protocol[8].value = this->rotationQ[0]; + this->protocol[9].value = this->rotationQ[1]; + this->protocol[10].value = this->rotationQ[2]; + this->protocol[11].value = this->rotationQ[3]; //SCALE - this->protocol[11].value = this->scale[0]; - this->protocol[12].value = this->scale[1]; - this->protocol[13].value = this->scale[2]; + this->protocol[12].value = this->scale[0]; + this->protocol[13].value = this->scale[1]; + this->protocol[14].value = this->scale[2]; return protocol; } diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index 1b8b63ec..82599677 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -15,18 +15,15 @@ namespace DanBias { GameLobby::GameLobby() { } - GameLobby::~GameLobby() { this->clients.Clear(); } - void GameLobby::Release() { NetworkSession::CloseSession(true); this->gameSession.CloseSession(true); } - void GameLobby::Update() { this->ProcessClients(); diff --git a/Code/Game/GameServer/Implementation/GameServer.cpp b/Code/Game/GameServer/Implementation/GameServer.cpp index 4fd6e03c..087fa7ff 100644 --- a/Code/Game/GameServer/Implementation/GameServer.cpp +++ b/Code/Game/GameServer/Implementation/GameServer.cpp @@ -61,8 +61,6 @@ void GameServerAPI::ServerStart() { timer.reset(); server.Start(); - - } void GameServerAPI::ServerStop() { @@ -113,8 +111,6 @@ void GameServerAPI::NotifyWhenClientConnect(ClientConnectedNotify func) { if(!func) clientConnectedCallback = DefaultClientConnectedNotify; else clientConnectedCallback = func; - - } void GameServerAPI::NotifyWhenClientDisconnect(ClientDisconnectedNotify func) { From b4b5998a643f1a132871eafe47c52113607412d3 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 16:16:27 +0100 Subject: [PATCH 07/36] Bunch of implementations --- Code/Game/GameClient/DanBiasGame_Impl.cpp | 6 +-- Code/Game/GameClient/GameClient.vcxproj | 8 +-- .../GameClient/GameClientState/GameState.cpp | 50 ++++++++++++++----- .../GameClient/GameClientState/GameState.h | 3 +- .../GameClientState/NetLoadState.cpp | 13 +++-- 5 files changed, 54 insertions(+), 26 deletions(-) diff --git a/Code/Game/GameClient/DanBiasGame_Impl.cpp b/Code/Game/GameClient/DanBiasGame_Impl.cpp index 392e917f..81650049 100644 --- a/Code/Game/GameClient/DanBiasGame_Impl.cpp +++ b/Code/Game/GameClient/DanBiasGame_Impl.cpp @@ -99,9 +99,6 @@ namespace DanBias data.timer.reset(); Graphics::API::Update( dt ); - - if(data.networkClient.IsConnected()) - data.networkClient.Update(); data.capFrame += dt; if(data.capFrame > 0.03) @@ -118,6 +115,9 @@ namespace DanBias data.capFrame = 0; } + if(data.networkClient.IsConnected()) + data.networkClient.Update(); + } return DanBiasClientReturn_Success; } diff --git a/Code/Game/GameClient/GameClient.vcxproj b/Code/Game/GameClient/GameClient.vcxproj index a87f61e4..3daafff3 100644 --- a/Code/Game/GameClient/GameClient.vcxproj +++ b/Code/Game/GameClient/GameClient.vcxproj @@ -112,7 +112,7 @@ Windows true %(AdditionalDependencies) - NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) + NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;GameClient_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -129,7 +129,7 @@ Windows true %(AdditionalDependencies) - NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) + NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;GameClient_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -150,7 +150,7 @@ true true %(AdditionalDependencies) - NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) + NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;GameClient_$(PlatformShortName).dll;%(DelayLoadDLLs) @@ -171,7 +171,7 @@ true true %(AdditionalDependencies) - NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) + NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;GameClient_$(PlatformShortName).dll;%(DelayLoadDLLs) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 29cfec03..38ded541 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -8,6 +8,7 @@ #include "C_obj/C_Player.h" #include "C_obj/C_DynamicObj.h" #include "C_obj/C_StaticObj.h" +#include "Utilities.h" using namespace ::DanBias::Client; using namespace ::Oyster; @@ -15,6 +16,7 @@ using namespace ::Oyster::Network; using namespace ::Oyster::Math3D; using namespace ::GameLogic; using namespace ::Utility::DynamicMemory; +using namespace ::Utility::String; struct GameState::MyData { @@ -40,6 +42,11 @@ struct GameState::MyData } privData; +inline Quaternion ArrayToQuaternion( const float source[4] ) +{ + return Quaternion( Float3(source[0], source[1], source[2]), source[3] ); +} + GameState::GameState() { this->privData = nullptr; @@ -75,21 +82,33 @@ bool GameState::Init( SharedStateContent &shared ) return true; } -void GameState::InitiatePlayer( int id, std::wstring modelName, Float4x4 world ) +void GameState::InitiatePlayer( int id, const std::string &modelName, const float position[3], const float rotation[4], const float scale[3], bool isMyPlayer ) { - this->privData->myId = id; - ModelInitData modelData; - modelData.visible = true; - modelData.position = Float3(world[12], world[13], world[14]); - modelData.rotation = Quaternion(Float3(0,0,0), 1); - modelData.scale = Float3(1,1,1); - modelData.modelPath = modelName; - modelData.id = this->privData->myId; - this->privData->player.Init( modelData ); + modelData.visible = true; + modelData.position = position; + modelData.rotation = ArrayToQuaternion( rotation ); + modelData.scale = scale; + StringToWstring( modelName, modelData.modelPath ); + modelData.id = id; - this->privData->camera.SetPosition( this->privData->player.getPos() ); - this->privData->camera.UpdateOrientation(); + if( isMyPlayer ) + { + if( this->privData->player.Init(modelData) ) + { + this->privData->myId = id; + this->privData->camera.SetPosition( this->privData->player.getPos() ); + this->privData->camera.UpdateOrientation(); + } + } + else + { + C_DynamicObj *p = new C_DynamicObj(); + if( p->Init(modelData) ) + { + (*this->privData->dynamicObjects)[id] = p; + } + } } GameClientState::ClientState GameState::Update( float deltaTime ) @@ -359,7 +378,12 @@ void GameState::DataRecieved( NetEventInitiatePlayer( decoded.object_ID, decoded.meshName, decoded.position, decoded.rotation, decoded.scale, decoded.owner ); + } + break; case protocol_Gameplay_ObjectJoinTeam: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectLeaveTeam: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectWeaponCooldown: break; /** @todo TODO: implement */ diff --git a/Code/Game/GameClient/GameClientState/GameState.h b/Code/Game/GameClient/GameClientState/GameState.h index 29ea2f1e..e3ced125 100644 --- a/Code/Game/GameClient/GameClientState/GameState.h +++ b/Code/Game/GameClient/GameClientState/GameState.h @@ -20,9 +20,8 @@ namespace DanBias { namespace Client ~GameState(void); bool Init( SharedStateContent &shared ); GameClientState::ClientState Update( float deltaTime ) override; - void InitiatePlayer( int id, std::wstring modelName, Oyster::Math::Float4x4 world ); + void InitiatePlayer( int id, const std::string &modelName, const float position[3], const float rotation[4], const float scale[3] ); void ReadKeyInput(); - bool Render()override; bool Release()override; void ChangeState( ClientState next ); diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 8274472d..f50db40c 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -27,7 +27,7 @@ struct NetLoadState::MyData bool loading; }; -inline Quaternion ArrayToQuaternion( float source[4] ) +inline Quaternion ArrayToQuaternion( const float source[4] ) { return Quaternion( Float3(source[0], source[1], source[2]), source[3] ); } @@ -99,6 +99,7 @@ void NetLoadState::DataRecieved( NetEventLoadGame( Protocol_LobbyCreateGame(e.args.data.protocol).modelName ); this->ChangeState( ClientState_Game ); + this->privData->loading = false; } } @@ -109,18 +110,20 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) LevelLoader loader; auto objects = loader.LoadLevel( fileName ); auto object = objects.begin(); - ObjectHeader *oh; + ObjectTypeHeader *oth; int objectID = 100; // first 100 is reserved for players. This is how the server does it. for( ; object != objects.end(); ++object ) { ++objectID; - oh = (ObjectHeader*)&*object; - switch( oh->typeID ) + oth = (ObjectTypeHeader*)(*object._Ptr); + switch( oth->typeID ) { case ObjectType::ObjectType_Static: { + ObjectHeader *oh = (ObjectHeader*)oth; + ModelInitData desc; desc.id = objectID; StringToWstring( oh->ModelFile, desc.modelPath ); @@ -142,6 +145,8 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) break; case ObjectType::ObjectType_Dynamic: { + ObjectHeader *oh = (ObjectHeader*)oth; + ModelInitData desc; desc.id = objectID; StringToWstring( oh->ModelFile, desc.modelPath ); From 5137404bb68b534d5d58aacd8ac2d82dfed1e693 Mon Sep 17 00:00:00 2001 From: dean11 Date: Mon, 17 Feb 2014 16:17:07 +0100 Subject: [PATCH 08/36] Temp --- Code/Game/GameProtocols/ObjectProtocols.h | 93 +++---- Code/Game/GameServer/GameLobby.h | 3 +- .../GameServer/Implementation/GameLobby.cpp | 229 +++++++++--------- .../GameLobby_ProtocolParser.cpp | 31 ++- .../Implementation/GameSession_General.cpp | 1 + 5 files changed, 199 insertions(+), 158 deletions(-) diff --git a/Code/Game/GameProtocols/ObjectProtocols.h b/Code/Game/GameProtocols/ObjectProtocols.h index e3449022..ff6aa6e5 100644 --- a/Code/Game/GameProtocols/ObjectProtocols.h +++ b/Code/Game/GameProtocols/ObjectProtocols.h @@ -546,14 +546,14 @@ namespace GameLogic //#define protocol_Gameplay_ObjectCreatePlayer 359 struct Protocol_ObjectCreatePlayer :public Oyster::Network::CustomProtocolObject { - //ObjectType type; //ie player, box or whatever - int object_ID; - int teamId; - std::string name; - std::string meshName; - float position[3]; - float rotationQ[4]; - float scale[3]; + /*1*/ int object_ID; + /*2*/ int teamId; + /*3*/ bool owner; + /*4*/ std::string name; + /*5*/ std::string meshName; + /*6 - 8*/ float position[3]; + /*9 - 11*/ float rotationQ[4]; + /*12 - 14*/ float scale[3]; Protocol_ObjectCreatePlayer() { @@ -564,44 +564,47 @@ namespace GameLogic this->protocol[1].type = Oyster::Network::NetAttributeType_Int; //TEAM_ID this->protocol[2].type = Oyster::Network::NetAttributeType_Int; + //OWNER + this->protocol[3].type = Oyster::Network::NetAttributeType_Bool; //PLAYER-NAME - this->protocol[3].type = Oyster::Network::NetAttributeType_CharArray; - //MESH-NAME this->protocol[4].type = Oyster::Network::NetAttributeType_CharArray; + //MESH-NAME + this->protocol[5].type = Oyster::Network::NetAttributeType_CharArray; //POSITION - this->protocol[5].type = Oyster::Network::NetAttributeType_Float; this->protocol[6].type = Oyster::Network::NetAttributeType_Float; this->protocol[7].type = Oyster::Network::NetAttributeType_Float; - //ROTATION this->protocol[8].type = Oyster::Network::NetAttributeType_Float; + //ROTATION this->protocol[9].type = Oyster::Network::NetAttributeType_Float; this->protocol[10].type = Oyster::Network::NetAttributeType_Float; - //SCALE this->protocol[11].type = Oyster::Network::NetAttributeType_Float; + //SCALE this->protocol[12].type = Oyster::Network::NetAttributeType_Float; this->protocol[13].type = Oyster::Network::NetAttributeType_Float; + this->protocol[14].type = Oyster::Network::NetAttributeType_Float; } Protocol_ObjectCreatePlayer(Oyster::Network::CustomNetProtocol& p) { this->object_ID = p[1].value.netInt; this->teamId = this->protocol[2].value.netInt; - this->name.assign(p[3].value.netCharPtr); - this->meshName.assign(p[4].value.netCharPtr); + this->owner = this->protocol[3].value.netBool; + this->name.assign(p[4].value.netCharPtr); + this->meshName.assign(p[5].value.netCharPtr); - this->position[0] = p[5].value.netFloat; - this->position[1] = p[6].value.netFloat; - this->position[2] = p[7].value.netFloat; + this->position[0] = p[6].value.netFloat; + this->position[1] = p[7].value.netFloat; + this->position[2] = p[8].value.netFloat; - this->rotationQ[0] = p[8].value.netFloat; - this->rotationQ[1] = p[9].value.netFloat; - this->rotationQ[2] = p[10].value.netFloat; - this->rotationQ[3] = p[11].value.netFloat; + this->rotationQ[0] = p[9].value.netFloat; + this->rotationQ[1] = p[10].value.netFloat; + this->rotationQ[2] = p[11].value.netFloat; + this->rotationQ[3] = p[12].value.netFloat; - this->scale[0] = p[12].value.netFloat; - this->scale[1] = p[13].value.netFloat; - this->scale[2] = p[14].value.netFloat; + this->scale[0] = p[13].value.netFloat; + this->scale[1] = p[14].value.netFloat; + this->scale[2] = p[15].value.netFloat; } - Protocol_ObjectCreatePlayer(float position[3], float rotation[4], float scale[3], int ObjectID, int teamID, std::string name, std::string meshName) + Protocol_ObjectCreatePlayer(float position[3], float rotation[4], float scale[3], int ObjectID, bool owner, int teamID, std::string name, std::string meshName) { this->protocol[0].value = protocol_Gameplay_ObjectCreatePlayer; this->protocol[0].type = Oyster::Network::NetAttributeType_Short; @@ -610,26 +613,29 @@ namespace GameLogic this->protocol[1].type = Oyster::Network::NetAttributeType_Int; //TEAM_ID this->protocol[2].type = Oyster::Network::NetAttributeType_Int; + //OWNER + this->protocol[3].type = Oyster::Network::NetAttributeType_Bool; //PLAYER-NAME - this->protocol[3].type = Oyster::Network::NetAttributeType_CharArray; - //MESH-NAME this->protocol[4].type = Oyster::Network::NetAttributeType_CharArray; + //MESH-NAME + this->protocol[5].type = Oyster::Network::NetAttributeType_CharArray; //POSITION - this->protocol[5].type = Oyster::Network::NetAttributeType_Float; this->protocol[6].type = Oyster::Network::NetAttributeType_Float; this->protocol[7].type = Oyster::Network::NetAttributeType_Float; - //ROTATION this->protocol[8].type = Oyster::Network::NetAttributeType_Float; + //ROTATION this->protocol[9].type = Oyster::Network::NetAttributeType_Float; this->protocol[10].type = Oyster::Network::NetAttributeType_Float; this->protocol[11].type = Oyster::Network::NetAttributeType_Float; - //SCALE this->protocol[12].type = Oyster::Network::NetAttributeType_Float; + //SCALE this->protocol[13].type = Oyster::Network::NetAttributeType_Float; this->protocol[14].type = Oyster::Network::NetAttributeType_Float; + this->protocol[15].type = Oyster::Network::NetAttributeType_Float; this->object_ID = ObjectID; this->teamId = teamID; + this->owner = owner; this->name = name; this->meshName = meshName; memcpy(&this->position[0], &position[0], sizeof(float)*3); @@ -641,22 +647,23 @@ namespace GameLogic this->protocol[1].value = this->object_ID; this->protocol[2].value = this->teamId; - this->protocol.Set(3, this->name); - this->protocol.Set(4, this->meshName); + this->protocol[3].value = this->owner; + this->protocol.Set(4, this->name); + this->protocol.Set(5, this->meshName); //POSITION - this->protocol[5].value = this->position[0]; - this->protocol[6].value = this->position[1]; - this->protocol[7].value = this->position[2]; + this->protocol[6].value = this->position[0]; + this->protocol[7].value = this->position[1]; + this->protocol[8].value = this->position[2]; //ROTATION - this->protocol[8].value = this->rotationQ[0]; - this->protocol[9].value = this->rotationQ[1]; - this->protocol[10].value = this->rotationQ[2]; - this->protocol[11].value = this->rotationQ[3]; + this->protocol[9].value = this->rotationQ[0]; + this->protocol[10].value = this->rotationQ[1]; + this->protocol[11].value = this->rotationQ[2]; + this->protocol[12].value = this->rotationQ[3]; //SCALE - this->protocol[12].value = this->scale[0]; - this->protocol[13].value = this->scale[1]; - this->protocol[14].value = this->scale[2]; + this->protocol[13].value = this->scale[0]; + this->protocol[14].value = this->scale[1]; + this->protocol[15].value = this->scale[2]; return protocol; } diff --git a/Code/Game/GameServer/GameLobby.h b/Code/Game/GameServer/GameLobby.h index 86cd498a..d0cbbcc3 100644 --- a/Code/Game/GameServer/GameLobby.h +++ b/Code/Game/GameServer/GameLobby.h @@ -41,11 +41,12 @@ namespace DanBias //void LobbyCreateGame(GameLogic::Protocol_LobbyCreateGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Create: void LobbyStartGame(GameLogic::Protocol_LobbyStartGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Start: //void LobbyJoin(GameLogic::Protocol_LobbyJoin& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Join: - void LobbyLogin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Login: + void LobbyLogin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Login: void LobbyRefresh(GameLogic::Protocol_LobbyRefresh& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Refresh: void LobbyGameData(GameLogic::Protocol_LobbyGameData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_GameData: void LobbyMainData(GameLogic::Protocol_LobbyClientData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_MainData: void LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_ClientReadyState: + void LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_QuerryGameType: private: void ClientEventCallback(Oyster::Network::NetEvent e) override; diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index 82599677..6f4f0a47 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -11,127 +11,132 @@ using namespace Oyster::Network; using namespace Oyster; using namespace GameLogic; -namespace DanBias +using namespace DanBias; + +GameLobby::GameLobby() +{ } +GameLobby::~GameLobby() +{ + this->clients.Clear(); +} +void GameLobby::Release() +{ + NetworkSession::CloseSession(true); + this->gameSession.CloseSession(true); +} +void GameLobby::Update() { - GameLobby::GameLobby() - { } - GameLobby::~GameLobby() - { - this->clients.Clear(); - } - void GameLobby::Release() - { - NetworkSession::CloseSession(true); - this->gameSession.CloseSession(true); - } - void GameLobby::Update() + for (unsigned int i = 0; i < this->clients.Size(); i++) { - this->ProcessClients(); - } - void GameLobby::SetGameDesc(const LobbyLevelData& desc) - { - this->description.gameMode = desc.gameMode; - this->description.gameTime = desc.gameTime; - this->description.mapNumber = desc.mapNumber; - this->description.maxClients = desc.maxClients; - } - void GameLobby::GetGameDesc(LobbyLevelData& desc) - { - desc.gameMode = this->description.gameMode; - desc.gameTime = this->description.gameTime; - desc.mapNumber = this->description.mapNumber; - desc.maxClients = this->description.maxClients; - } - bool GameLobby::StartGameSession( ) - { - //Check if all clients is ready - if(this->GetClientCount() && this->GetClientCount() == this->readyList.Size()) + if(this->clients[i]) { - GameSession::GameDescription desc; - desc.maxClients = this->description.maxClients; - desc.gameMode = this->description.gameMode; - desc.gameTime = this->description.gameTime; - desc.mapNumber = this->description.mapNumber; - desc.owner = this; - desc.clients = this->clients; + this->clients[i]->Update(); + } + } +} +void GameLobby::SetGameDesc(const LobbyLevelData& desc) +{ + this->description.gameMode = desc.gameMode; + this->description.gameTime = desc.gameTime; + this->description.mapNumber = desc.mapNumber; + this->description.maxClients = desc.maxClients; +} +void GameLobby::GetGameDesc(LobbyLevelData& desc) +{ + desc.gameMode = this->description.gameMode; + desc.gameTime = this->description.gameTime; + desc.mapNumber = this->description.mapNumber; + desc.maxClients = this->description.maxClients; +} +bool GameLobby::StartGameSession( ) +{ +//Check if all clients is ready + if(this->GetClientCount() && this->GetClientCount() == this->readyList.Size()) + { + GameSession::GameDescription desc; + desc.maxClients = this->description.maxClients; + desc.gameMode = this->description.gameMode; + desc.gameTime = this->description.gameTime; + desc.mapNumber = this->description.mapNumber; + desc.owner = this; + desc.clients = this->clients; - if(desc.gameTime == 0.0f) - desc.gameTime = (int)(60.0f * 10.0f); //note: should be fetched from somewhere. + if(desc.gameTime == 0.0f) + desc.gameTime = (int)(60.0f * 10.0f); //note: should be fetched from somewhere. - if(desc.maxClients == 0) - desc.maxClients = 10; //note: should be fetched somewhere else.. + if(desc.maxClients == 0) + desc.maxClients = 10; //note: should be fetched somewhere else.. - this->clients.Clear(); //Remove clients from lobby list + this->clients.Clear(); //Remove clients from lobby list - if(this->gameSession.Create(desc)) - { - this->gameSession.Run(); + if(this->gameSession.Create(desc)) + { + this->gameSession.Run(); - return true; + return true; + } + } + else + { + //? + } + return false; +} + +void GameLobby::ClientEventCallback(NetEvent e) +{ + switch (e.args.type) + { + case NetworkClient::ClientEventArgs::EventType_Disconnect: + + break; + case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve: + + break; + case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend: + printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", e.sender->GetID(), e.sender->GetIpAddress().c_str()); + e.sender->Disconnect(); + this->readyList.Remove(e.sender); + this->clients.Remove(e.sender); + break; + case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: + printf("\t(%i : %s) - EventType_ProtocolRecieved\n", e.sender->GetID(), e.sender->GetIpAddress().c_str()); + this->ParseProtocol(e.args.data.protocol, e.sender); + break; + } +} +void GameLobby::ClientConnectedEvent(Utility::DynamicMemory::SmartPointer client) +{ + printf("New client(%i) connected - %s \n", client->GetID(), client->GetIpAddress().c_str()); + + if(this->gameSession) + { + Attach(client); + } + else + { + Attach(client); + Protocol_LobbyClientData p1; + Protocol_LobbyGameData p2; + + for (unsigned int i = 0; i < this->clients.Size(); i++) + { + if(this->clients[i]) + { + Protocol_LobbyClientData::PlayerData t; + t.id = this->clients[i]->GetID(); + t.ip = this->clients[i]->GetIpAddress(); + t.team = 0; + t.name = "Dennis är kung tycker Erik!"; + p1.list.Push(t); } } - else - { - //? - } - return false; + p2.majorVersion = 1; + p2.minorVersion = 0; + p2.mapName = "Dennis är kung tycker Erik!"; + + client->Send(p1.GetProtocol()); + client->Send(p2.GetProtocol()); } +} - void GameLobby::ClientEventCallback(NetEvent e) - { - switch (e.args.type) - { - case NetworkClient::ClientEventArgs::EventType_Disconnect: - - break; - case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve: - - break; - case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend: - printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", e.sender->GetID(), e.sender->GetIpAddress().c_str()); - e.sender->Disconnect(); - this->readyList.Remove(e.sender); - this->clients.Remove(e.sender); - break; - case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: - printf("\t(%i : %s) - EventType_ProtocolRecieved\n", e.sender->GetID(), e.sender->GetIpAddress().c_str()); - this->ParseProtocol(e.args.data.protocol, e.sender); - break; - } - } - void GameLobby::ClientConnectedEvent(Utility::DynamicMemory::SmartPointer client) - { - printf("New client(%i) connected - %s \n", client->GetID(), client->GetIpAddress().c_str()); - - if(this->gameSession) - { - this->gameSession.Attach(client); - } - else - { - Attach(client); - Protocol_LobbyClientData p1; - Protocol_LobbyGameData p2; - - for (unsigned int i = 0; i < this->clients.Size(); i++) - { - if(this->clients[i]) - { - Protocol_LobbyClientData::PlayerData t; - t.id = this->clients[i]->GetID(); - t.ip = this->clients[i]->GetIpAddress(); - t.team = 0; - t.name = "Dennis är kung tycker Erik!"; - p1.list.Push(t); - } - } - p2.majorVersion = 1; - p2.minorVersion = 0; - p2.mapName = "Dennis är kung tycker Erik!"; - - client->Send(p1.GetProtocol()); - client->Send(p2.GetProtocol()); - } - } - -}//End namespace DanBias \ No newline at end of file diff --git a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp index 7493cb5a..d49f83fc 100644 --- a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp @@ -18,11 +18,11 @@ void GameLobby::ParseProtocol(Oyster::Network::CustomNetProtocol& p, NetworkClie break; //case protocol_Lobby_Create: this->LobbyCreateGame (Protocol_LobbyCreateGame (p), c); //break; - case protocol_Lobby_StartGame: this->LobbyStartGame (Protocol_LobbyStartGame (p), c); + case protocol_Lobby_StartGame: this->LobbyStartGame (Protocol_LobbyStartGame (p), c); break; //case protocol_Lobby_Join: this->LobbyJoin (Protocol_LobbyJoin (p), c); //break; - case protocol_Lobby_Login: this->LobbyLogin (Protocol_LobbyJoinGame (p), c); + case protocol_Lobby_Login: this->LobbyLogin (Protocol_LobbyJoinGame (p), c); break; case protocol_Lobby_Refresh: this->LobbyRefresh (Protocol_LobbyRefresh (p), c); break; @@ -32,6 +32,8 @@ void GameLobby::ParseProtocol(Oyster::Network::CustomNetProtocol& p, NetworkClie break; case protocol_Lobby_ClientReadyState: this->LobbyReady (Protocol_LobbyClientReadyState (p), c); break; + case protocol_Lobby_QuerryGameType: this->LobbyReady (Protocol_LobbyClientReadyState (p), c); + break; } } @@ -112,4 +114,29 @@ void GameLobby::LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster: this->readyList.Remove(c); } } +void GameLobby::LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c) +{ + NetClient temp; + bool found = false; + //find client in waiting list + for (unsigned int i = 0; !found && i < this->clients.Size(); i++) + { + if(this->clients[i]->GetID() == c->GetID()) + { + temp = this->clients[i]; + found = true; + } + } + + //Something is wrong + if(!found) + { + c->Disconnect(); + } + else + { + //Send game data + this->gameSession.Attach(temp); + } +} diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index 647cee4a..cf82cc61 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -209,6 +209,7 @@ namespace DanBias { IPlayerData* p = this->clients[i]->GetPlayer(); Protocol_ObjectCreate oc(p->GetPosition(), p->GetRotation(), p->GetScale(), p->GetID(), "char_white.dan"); + //Protocol_ObjectCreatePlayer oc(p->GetPosition(), p->GetRotation(), p->GetScale(), p->GetID(), "char_white.dan"); this->clients[i]->GetClient()->Send(oc); } } From 930a6ee2792357fc66742dc7138a56abbc06a673 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Mon, 17 Feb 2014 16:18:21 +0100 Subject: [PATCH 09/36] Oops .. Forgot to save this one for the previous commit --- Code/Game/GameClient/GameClientState/GameState.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.h b/Code/Game/GameClient/GameClientState/GameState.h index e3ced125..035ad566 100644 --- a/Code/Game/GameClient/GameClientState/GameState.h +++ b/Code/Game/GameClient/GameClientState/GameState.h @@ -20,7 +20,7 @@ namespace DanBias { namespace Client ~GameState(void); bool Init( SharedStateContent &shared ); GameClientState::ClientState Update( float deltaTime ) override; - void InitiatePlayer( int id, const std::string &modelName, const float position[3], const float rotation[4], const float scale[3] ); + void InitiatePlayer( int id, const std::string &modelName, const float position[3], const float rotation[4], const float scale[3], bool isMyPlayer ); void ReadKeyInput(); bool Render()override; bool Release()override; From 5b4758d2ae478bd3b9d1913bd78a069e643b4592 Mon Sep 17 00:00:00 2001 From: Dennis Andersen Date: Tue, 18 Feb 2014 08:55:38 +0100 Subject: [PATCH 10/36] Broekn --- .../GameClientState/NetLoadState.cpp | 2 +- Code/Game/GameProtocols/LobbyProtocols.h | 68 ++-- Code/Game/GameServer/GameClient.h | 20 +- Code/Game/GameServer/GameLobby.h | 25 +- Code/Game/GameServer/GameSession.h | 14 +- .../GameServer/Implementation/GameClient.cpp | 55 +-- .../GameServer/Implementation/GameLobby.cpp | 8 +- .../GameLobby_ProtocolParser.cpp | 62 +-- .../Implementation/GameSession_Gameplay.cpp | 6 +- .../Implementation/GameSession_General.cpp | 354 ++++++++++-------- Code/Network/NetworkAPI/NetworkClient.h | 8 +- 11 files changed, 306 insertions(+), 316 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 3463182e..ab492797 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -81,7 +81,7 @@ void NetLoadState::DataRecieved( NetEventprivData->loading ) { - this->LoadGame( Protocol_LobbyCreateGame(e.args.data.protocol).modelName ); + this->LoadGame( Protocol_LobbyCreateGame(e.args.data.protocol).mapName ); } } diff --git a/Code/Game/GameProtocols/LobbyProtocols.h b/Code/Game/GameProtocols/LobbyProtocols.h index 71202898..26909bbf 100644 --- a/Code/Game/GameProtocols/LobbyProtocols.h +++ b/Code/Game/GameProtocols/LobbyProtocols.h @@ -41,61 +41,41 @@ namespace GameLogic struct Protocol_LobbyCreateGame :public Oyster::Network::CustomProtocolObject { - short clientID; // The unuiqe id reprsenting a specific client - std::string modelName; - float worldMatrix[16]; - + char majorVersion; + char minorVersion; + std::string mapName; + Protocol_LobbyCreateGame() { - int c = 0; - this->protocol[c].value = protocol_Lobby_CreateGame; - this->protocol[c++].type = Oyster::Network::NetAttributeType_Short; - - this->protocol[c++].type = Oyster::Network::NetAttributeType_Short; - for (int i = 0; i <= 16; i++) - { - this->protocol[c++].type = Oyster::Network::NetAttributeType_Float; - } - this->protocol[c++].type = Oyster::Network::NetAttributeType_CharArray; + this->protocol[0].value = protocol_Lobby_CreateGame; + this->protocol[0].type = Oyster::Network::NetAttributeType_Short; + this->protocol[1].type = Oyster::Network::NetAttributeType_Char; + this->protocol[2].type = Oyster::Network::NetAttributeType_Char; + this->protocol[3].type = Oyster::Network::NetAttributeType_CharArray; } - Protocol_LobbyCreateGame(short _clientID, std::string name, float world[16]) + Protocol_LobbyCreateGame(char majorVersion, char minorVersion, std::string name) { - int c = 0; - this->protocol[c].value = protocol_Lobby_CreateGame; - this->protocol[c++].type = Oyster::Network::NetAttributeType_Short; + this->protocol[0].value = protocol_Lobby_CreateGame; + this->protocol[0].type = Oyster::Network::NetAttributeType_Short; + this->protocol[1].type = Oyster::Network::NetAttributeType_Char; + this->protocol[2].type = Oyster::Network::NetAttributeType_Char; + this->protocol[3].type = Oyster::Network::NetAttributeType_CharArray; - this->protocol[c++].type = Oyster::Network::NetAttributeType_Short; - for (int i = 0; i <= 16; i++) - { - this->protocol[c++].type = Oyster::Network::NetAttributeType_Float; - } - - this->protocol[c++].type = Oyster::Network::NetAttributeType_CharArray; - - clientID = _clientID; - modelName = name; - memcpy(&worldMatrix[0], &world[0], sizeof(float) * 16); + this->majorVersion = majorVersion; + this->minorVersion = minorVersion; + this->mapName = name; } Protocol_LobbyCreateGame(Oyster::Network::CustomNetProtocol o) { - int c = 1; - clientID = o[c++].value.netInt; - for (int i = 0; i <= 16; i++) - { - this->worldMatrix[i] = o[c++].value.netFloat; - } - modelName.assign(o[c++].value.netCharPtr); + this->majorVersion = o[1].value.netChar; + this->minorVersion = o[2].value.netChar; + this->mapName.assign(o[3].value.netCharPtr); } Oyster::Network::CustomNetProtocol GetProtocol() override { - int c = 1; - protocol[c++].value = clientID; - - for (int i = 0; i <= 16; i++) - { - this->protocol[c++].value = this->worldMatrix[i]; - } - protocol.Set(c++, this->modelName); + protocol[1].value = this->majorVersion; + protocol[2].value = this->minorVersion; + protocol.Set(3, this->mapName); return protocol; } diff --git a/Code/Game/GameServer/GameClient.h b/Code/Game/GameServer/GameClient.h index a9c33cf3..09b3bc40 100644 --- a/Code/Game/GameServer/GameClient.h +++ b/Code/Game/GameServer/GameClient.h @@ -25,19 +25,31 @@ namespace DanBias Utility::DynamicMemory::SmartPointer GetClient(); Utility::DynamicMemory::SmartPointer ReleaseClient(); - float GetSinceLastResponse() const; - bool IsReady() const; - bool Equals(const Oyster::Network::NetworkClient* c); + inline bool operator==(const GameLogic::IPlayerData* c) { return (this->player) ? (c->GetID() == this->player->GetID()) : false ; } + inline bool operator==(const Oyster::Network::NetworkClient* c) { return (c->GetID() == this->GetID()); } + inline float GetSinceLastResponse() const { return this->secondsSinceLastResponse; } + inline std::wstring GetAlias() const { return this->alias; } + inline std::wstring GetCharacter() const { return this->character; } + inline bool IsReady() const { return this->isReady; } + inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } + + + void SetPlayer(GameLogic::IPlayerData* player); void SetReadyState(bool isReady); + void SetAlias(std::wstring alias); + void SetCharacter(std::wstring character); void SetSinceLastResponse(float seconds); private: GameLogic::IPlayerData* player; Utility::DynamicMemory::SmartPointer client; + bool isReady; float secondsSinceLastResponse; - }; + std::wstring alias; + std::wstring character; + }; }//End namespace DanBias #endif // !DANBIASSERVER_CLIENT_OBJECT_H diff --git a/Code/Game/GameServer/GameLobby.h b/Code/Game/GameServer/GameLobby.h index d0cbbcc3..ac4db486 100644 --- a/Code/Game/GameServer/GameLobby.h +++ b/Code/Game/GameServer/GameLobby.h @@ -36,25 +36,24 @@ namespace DanBias private: void ParseProtocol(Oyster::Network::CustomNetProtocol& p, Oyster::Network::NetworkClient* c); - void GeneralStatus(GameLogic::Protocol_General_Status& p, Oyster::Network::NetworkClient* c); //id = protocol_General_Status: - void GeneralText(GameLogic::Protocol_General_Text& p, Oyster::Network::NetworkClient* c); //id = protocol_General_Text: - //void LobbyCreateGame(GameLogic::Protocol_LobbyCreateGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Create: - void LobbyStartGame(GameLogic::Protocol_LobbyStartGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Start: - //void LobbyJoin(GameLogic::Protocol_LobbyJoin& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Join: - void LobbyLogin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Login: - void LobbyRefresh(GameLogic::Protocol_LobbyRefresh& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Refresh: - void LobbyGameData(GameLogic::Protocol_LobbyGameData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_GameData: - void LobbyMainData(GameLogic::Protocol_LobbyClientData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_MainData: - void LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_ClientReadyState: - void LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_QuerryGameType: + void GeneralStatus(GameLogic::Protocol_General_Status& p, Oyster::Network::NetworkClient* c); //id = protocol_General_Status: + void GeneralText(GameLogic::Protocol_General_Text& p, Oyster::Network::NetworkClient* c); //id = protocol_General_Text: + void LobbyStartGame(GameLogic::Protocol_LobbyStartGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Start: + void LobbyJoin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Login: + void LobbyRefresh(GameLogic::Protocol_LobbyRefresh& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_Refresh: + void LobbyGameData(GameLogic::Protocol_LobbyGameData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_GameData: + void LobbyMainData(GameLogic::Protocol_LobbyClientData& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_MainData: + void LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_ClientReadyState: + void LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_QuerryGameType: private: void ClientEventCallback(Oyster::Network::NetEvent e) override; void ClientConnectedEvent(Utility::DynamicMemory::SmartPointer client) override; private: - Utility::WinTimer timer; - float refreshFrequency; + //Utility::WinTimer timer; + //float refreshFrequency; + Utility::DynamicMemory::LinkedList readyList; GameSession gameSession; LobbyLevelData description; diff --git a/Code/Game/GameServer/GameSession.h b/Code/Game/GameServer/GameSession.h index 3d86ea78..8cd04048 100644 --- a/Code/Game/GameServer/GameSession.h +++ b/Code/Game/GameServer/GameSession.h @@ -31,10 +31,10 @@ namespace DanBias */ struct GameDescription { - int maxClients; - int mapNumber; - int gameMode; - int gameTime; + unsigned int maxClients; + std::string mapName; + std::string gameMode; + int gameTimeMinutes; Oyster::Network::NetworkSession* owner; Utility::DynamicMemory::DynamicArray clients; }; @@ -61,14 +61,14 @@ namespace DanBias //Private member functions private: - // TODO: find out what this method does.. + // Client event callback function void ClientEventCallback(Oyster::Network::NetEvent e) override; - //Sends a client to the owner, if obj is NULL then all clients is sent + //Sends a client to the owner, if param is NULL then all clients is sent void SendToOwner(DanBias::GameClient* obj); //Derived from IThreadObject - void ThreadEntry() override; + void ThreadEntry( ) override; bool DoWork ( ) override; diff --git a/Code/Game/GameServer/Implementation/GameClient.cpp b/Code/Game/GameServer/Implementation/GameClient.cpp index 3956fe57..6e68b1e8 100644 --- a/Code/Game/GameServer/Implementation/GameClient.cpp +++ b/Code/Game/GameServer/Implementation/GameClient.cpp @@ -12,51 +12,26 @@ using namespace DanBias; using namespace GameLogic; -GameClient::GameClient(SmartPointer client, GameLogic::IPlayerData* player) +GameClient::GameClient() { - this->client = client; - this->player = player; + this->player = 0; isReady = false; + this->character = L"Unknown"; + this->alias = L"Unknown"; + this->secondsSinceLastResponse = 0.0f; } GameClient::~GameClient() { - this->client->Disconnect(); this->player = 0; - isReady = false; + this->isReady = false; + this->character = L"Unknown"; + this->alias = L"Unknown"; + this->secondsSinceLastResponse = 0.0f; } -GameLogic::IPlayerData* GameClient::GetPlayer() +void GameClient::SetPlayer(GameLogic::IPlayerData* player) { - return this->player; -} -GameLogic::IPlayerData* GameClient::ReleasePlayer() -{ - GameLogic::IPlayerData *temp = this->player; - this->player = 0; - return temp; -} -SmartPointer GameClient::GetClient() -{ - return this->client; -} -SmartPointer GameClient::ReleaseClient() -{ - SmartPointer temp = this->client; - this->client = 0; - return temp; -} - -float GameClient::GetSinceLastResponse() const -{ - return this->secondsSinceLastResponse; -} -bool GameClient::IsReady() const -{ - return this->isReady; -} -bool GameClient::Equals(const NetworkClient* c) -{ - return (c->GetID() == this->client->GetID()); + this->player = player; } void GameClient::SetReadyState(bool r) { @@ -66,5 +41,13 @@ void GameClient::SetSinceLastResponse(float s) { this->secondsSinceLastResponse = s; } +void GameClient::SetAlias(std::wstring alias) +{ + this->alias = alias; +} +void GameClient::SetCharacter(std::wstring character) +{ + this->character = character; +} diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index 6f4f0a47..2a297e2f 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -56,13 +56,13 @@ bool GameLobby::StartGameSession( ) GameSession::GameDescription desc; desc.maxClients = this->description.maxClients; desc.gameMode = this->description.gameMode; - desc.gameTime = this->description.gameTime; - desc.mapNumber = this->description.mapNumber; + desc.gameTimeMinutes = this->description.gameTime; + //desc.mapName = this->description.mapNumber; desc.owner = this; desc.clients = this->clients; - if(desc.gameTime == 0.0f) - desc.gameTime = (int)(60.0f * 10.0f); //note: should be fetched from somewhere. + if(desc.gameTimeMinutes == 0) + desc.gameTimeMinutes = 10; //note: should be fetched from somewhere. if(desc.maxClients == 0) desc.maxClients = 10; //note: should be fetched somewhere else.. diff --git a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp index d49f83fc..81758480 100644 --- a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp @@ -12,27 +12,23 @@ void GameLobby::ParseProtocol(Oyster::Network::CustomNetProtocol& p, NetworkClie { switch (p[0].value.netShort) { - case protocol_General_Status: this->GeneralStatus (Protocol_General_Status (p), c); + case protocol_General_Status: this->GeneralStatus (Protocol_General_Status (p), c); break; - case protocol_General_Text: this->GeneralText (Protocol_General_Text (p), c); + case protocol_General_Text: this->GeneralText (Protocol_General_Text (p), c); break; - //case protocol_Lobby_Create: this->LobbyCreateGame (Protocol_LobbyCreateGame (p), c); - //break; - case protocol_Lobby_StartGame: this->LobbyStartGame (Protocol_LobbyStartGame (p), c); + case protocol_Lobby_StartGame: this->LobbyStartGame (Protocol_LobbyStartGame (p), c); break; - //case protocol_Lobby_Join: this->LobbyJoin (Protocol_LobbyJoin (p), c); - //break; - case protocol_Lobby_Login: this->LobbyLogin (Protocol_LobbyJoinGame (p), c); + case protocol_Lobby_JoinGame: this->LobbyJoin (Protocol_LobbyJoinGame (p), c); break; - case protocol_Lobby_Refresh: this->LobbyRefresh (Protocol_LobbyRefresh (p), c); + case protocol_Lobby_Refresh: this->LobbyRefresh (Protocol_LobbyRefresh (p), c); break; - case protocol_Lobby_GameData: this->LobbyGameData (Protocol_LobbyGameData (p), c); + case protocol_Lobby_GameData: this->LobbyGameData (Protocol_LobbyGameData (p), c); break; - case protocol_Lobby_ClientData: this->LobbyMainData (Protocol_LobbyClientData (p), c); + case protocol_Lobby_ClientData: this->LobbyMainData (Protocol_LobbyClientData (p), c); break; - case protocol_Lobby_ClientReadyState: this->LobbyReady (Protocol_LobbyClientReadyState (p), c); + case protocol_Lobby_ClientReadyState: this->LobbyReady (Protocol_LobbyClientReadyState (p), c); break; - case protocol_Lobby_QuerryGameType: this->LobbyReady (Protocol_LobbyClientReadyState (p), c); + case protocol_Lobby_QuerryGameType: this->LobbyQuerryGameData (Protocol_QuerryGameType (), c); break; } } @@ -59,37 +55,40 @@ void GameLobby::GeneralStatus(GameLogic::Protocol_General_Status& p, Oyster::Net } void GameLobby::GeneralText(GameLogic::Protocol_General_Text& p, Oyster::Network::NetworkClient* c) { + for (unsigned int i = 0; i < this->clients.Size(); i++) + { + if(this->clients[i]) + { + this->clients[i]->Send(p); + } + } printf(p.text.c_str()); } -//void GameLobby::LobbyCreateGame(GameLogic::Protocol_LobbyCreateGame& p, Oyster::Network::NetworkClient* c) -//{ -// -//} void GameLobby::LobbyStartGame(GameLogic::Protocol_LobbyStartGame& p, Oyster::Network::NetworkClient* c) { if(this->sessionOwner->GetClient()->GetID() == c->GetID()) { - + //Send countdown timer before lobby shuts down + for (unsigned int i = 0; i < this->clients.Size(); i++) + { + this->clients[i]->Send(Protocol_LobbyStartGame(3.0f)); + } } else { //Someone else tried to start the server.. } } -//void GameLobby::LobbyJoin(GameLogic::Protocol_LobbyJoin& p, Oyster::Network::NetworkClient* c) -//{ -// //for (unsigned int i = 0; i < this->gameLobby.Size(); i++) -// //{ -// // if (this->gameLobby[i]->GetID() == p.value) -// // { -// // this->gameLobby[i]->Attach(Detach(c)); -// // return; -// // } -// //} -//} -void GameLobby::LobbyLogin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c) +void GameLobby::LobbyJoin(GameLogic::Protocol_LobbyJoinGame& p, Oyster::Network::NetworkClient* c) { - + //for (unsigned int i = 0; i < this->gameLobby.Size(); i++) + //{ + // if (this->gameLobby[i]->GetID() == p.value) + // { + // this->gameLobby[i]->Attach(Detach(c)); + // return; + // } + //} } void GameLobby::LobbyRefresh(GameLogic::Protocol_LobbyRefresh& p, Oyster::Network::NetworkClient* c) { @@ -112,6 +111,7 @@ void GameLobby::LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster: else { this->readyList.Remove(c); + } } void GameLobby::LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c) diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index ca1572a1..d0cf5190 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -19,11 +19,8 @@ using namespace Oyster; using namespace Oyster::Network; using namespace Oyster::Thread; using namespace GameLogic; +using namespace DanBias; -namespace DanBias -{ - Utility::WinTimer testTimer; - int testID = -1; bool GameSession::DoWork( ) { @@ -246,7 +243,6 @@ namespace DanBias printf("Message recieved from (%i):\t %s\n", c->GetClient()->GetID(), p.text.c_str()); } -}//End namespace DanBias diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index cf82cc61..cd89dc9a 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -24,217 +24,243 @@ using namespace Oyster; using namespace Oyster::Network; using namespace Oyster::Thread; using namespace GameLogic; +using namespace DanBias; -namespace DanBias +GameSession* GameSession::gameSession = nullptr; + +GameSession::GameSession() + :gameInstance(GameAPI::Instance()) { - GameSession* GameSession::gameSession = nullptr; + this->owner = 0; + this->isCreated = false; + this->isRunning = false; + this->gameSession = this; + this->logicFrameTime = DELTA_TIME_20; + this->networkFrameTime = DELTA_TIME_20; + this->networkTimer.reset(); + this->logicTimer.reset(); - GameSession::GameSession() - :gameInstance(GameAPI::Instance()) + memset(&this->description, 0, sizeof(GameDescription)); +} + +GameSession::~GameSession() +{ + this->worker.Terminate(); + this->clients.Clear(); + this->gameInstance; + this->owner = 0; + this->isCreated = false; + this->isRunning = false; +} + +bool GameSession::Create(GameDescription& desc) +{ + this->description = desc; +/* Do some error checking */ + if(desc.clients.Size() == 0) return false; + if(!desc.owner) return false; + if(this->isCreated) return false; + +/* standard initialization of some data */ + NetworkSession::clients = desc.clients; + NetworkSession::clients.Resize((unsigned int)desc.maxClients); + this->clients.Resize((unsigned int)desc.maxClients); + this->owner = desc.owner; + +/* Initiate the game instance */ + if(!this->gameInstance.Initiate()) { - this->owner = 0; - this->isCreated = false; - this->isRunning = false; - this->gameSession = this; - this->logicFrameTime = DELTA_TIME_20; - this->networkFrameTime = DELTA_TIME_20; - this->networkTimer.reset(); - this->logicTimer.reset(); - - memset(&this->description, 0, sizeof(GameDescription)); + printf("Failed to initiate the game instance\n"); } - GameSession::~GameSession() +/* Create the players in the game instance */ + GameLogic::IPlayerData* p = 0; + for (unsigned int i = 0; i < desc.clients.Size(); i++) { - this->worker.Terminate(); - this->clients.Clear(); - this->gameInstance; - this->owner = 0; - this->isCreated = false; - this->isRunning = false; - } - - bool GameSession::Create(GameDescription& desc) - { - this->description = desc; - /* Do some error checking */ - if(desc.clients.Size() == 0) return false; - if(!desc.owner) return false; - if(this->isCreated) return false; - - /* standard initialization of some data */ - NetworkSession::clients = desc.clients; - NetworkSession::clients.Resize((unsigned int)desc.maxClients); - this->clients.Resize((unsigned int)desc.maxClients); - this->owner = desc.owner; - - /* Initiate the game instance */ - if(!this->gameInstance.Initiate()) + if(desc.clients[i]) { - printf("Failed to initiate the game instance\n"); - } - - /* Create the players in the game instance */ - GameLogic::IPlayerData* p = 0; - for (unsigned int i = 0; i < desc.clients.Size(); i++) - { - if(desc.clients[i]) + if( (p = this->gameInstance.CreatePlayer()) ) { - if( (p = this->gameInstance.CreatePlayer()) ) - { - desc.clients[i]->SetOwner(this); - this->clients[i] = (new GameClient(desc.clients[i], p)); - } - else - { - printf("Failed to create player (%i)\n", i); - } + desc.clients[i]->SetOwner(this); + this->clients[i] = (new GameClient(desc.clients[i], p)); + } + else + { + printf("Failed to create player (%i)\n", i); } } - - /* Create the game level */ - if(!(this->levelData = this->gameInstance.CreateLevel())) - { - printf("Level not created!"); - return false; - } - - /* Set some game instance data options */ - this->gameInstance.SetSubscription(GameSession::ObjectMove); - this->gameInstance.SetSubscription(GameSession::ObjectDisabled); - this->gameInstance.SetFPS(60); - - this->description.clients.Clear(); - - this->isCreated = true; - - /* Create the worker thread */ - if(this->worker.Create(this, false) != OYSTER_THREAD_ERROR_SUCCESS) - return false; - - return this->isCreated; } - void GameSession::Run() +/* Create the game level */ + if(!(this->levelData = this->gameInstance.CreateLevel())) { - if(this->isRunning) return; - - if(this->clients.Size() > 0) - { - this->worker.Start(); - this->worker.SetPriority(OYSTER_THREAD_PRIORITY_1); - this->isRunning = true; - } + printf("Level not created!"); + return false; } - void GameSession::ThreadEntry( ) - { - //List with clients that we are waiting on.. - DynamicArray> readyList;// = this->clients; +/* Set some game instance data options */ + this->gameInstance.SetSubscription(GameSession::ObjectMove); + this->gameInstance.SetSubscription(GameSession::ObjectDisabled); + this->gameInstance.SetFPS(60); - //First we need to clean invalid clients, if any, and tell them to start loading game data - for (unsigned int i = 0; i < this->clients.Size(); i++) + this->description.clients.Clear(); + + this->isCreated = true; + + /* Create the worker thread */ + if(this->worker.Create(this, false) != OYSTER_THREAD_ERROR_SUCCESS) + return false; + + return this->isCreated; +} + +void GameSession::Run() +{ + if(this->isRunning) return; + + if(this->clients.Size() > 0) + { + this->worker.Start(); + this->worker.SetPriority(OYSTER_THREAD_PRIORITY_1); + this->isRunning = true; + } +} + +void GameSession::ThreadEntry( ) +{ +//List with clients that we are waiting on.. + DynamicArray> readyList;// = this->clients; + +//First we need to clean invalid clients, if any, and tell them to start loading game data + for (unsigned int i = 0; i < this->clients.Size(); i++) + { + if(this->clients[i]) { - if(this->clients[i]) - { - if(this->clients[i]->IsReady()) - { - readyList.Push(this->clients[i]); - Protocol_LobbyCreateGame p(readyList[i]->GetPlayer()->GetID(), "char_white.dan", readyList[i]->GetPlayer()->GetOrientation()); - readyList[readyList.Size() - 1]->GetClient()->Send(p); - } - } + readyList.Push(this->clients[i]); + Protocol_LobbyCreateGame p((char)1, (char)0, this->description.mapName); + readyList[readyList.Size() - 1]->GetClient()->Send(p); } + } - unsigned int readyCounter = readyList.Size(); + unsigned int readyCounter = readyList.Size(); - //Sync with clients - while (readyCounter != 0) +//Sync with clients + while (readyCounter != 0) + { + this->ProcessClients(); + for (unsigned int i = 0; i < readyList.Size(); i++) { - this->ProcessClients(); - for (unsigned int i = 0; i < readyList.Size(); i++) + if(readyList[i] && readyList[i]->IsReady()) { - if(readyList[i] && readyList[i]->IsReady()) + //Need to send information about other players, to all players + for (unsigned int k = 0; k < this->clients.Size(); k++) { - //Need to send information about other players, to all players - for (unsigned int k = 0; k < this->clients.Size(); k++) + if((this->clients[k] && readyList[i]) && readyList[i]->GetClient()->GetID() != this->clients[k]->GetClient()->GetID()) { - if((this->clients[k] && readyList[i]) && readyList[i]->GetClient()->GetID() != this->clients[k]->GetClient()->GetID()) - { - //Protocol_ObjectCreatePlayer - Protocol_ObjectCreate p( this->clients[k]->GetPlayer()->GetPosition(), - this->clients[k]->GetPlayer()->GetRotation(), - this->clients[k]->GetPlayer()->GetScale(), - this->clients[k]->GetPlayer()->GetID(), "char_white.dan"); //The model name will be custom later.. - readyList[i]->GetClient()->Send(p); - } + IPlayerData* pl = this->clients[k]->GetPlayer(); + Protocol_ObjectCreatePlayer p( pl->GetPosition(), pl->GetRotation(), pl->GetScale(), + pl->GetID(), true, this->clients[k]->GetPlayer()->GetTeamID(), + /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); + readyList[i]->GetClient()->Send(p); } - - readyCounter-- ; - readyList[i] = 0; } + + readyCounter-- ; + readyList[i] = 0; } - Sleep(5); //TODO: This might not be needed here. } + Sleep(5); //TODO: This might not be needed here. + } +//Sync with clients before starting countdown + + for (unsigned int i = 0; i < this->clients.Size(); i++) + { + if(this->clients[i]) + { + this->clients[i]->GetClient()->Send(GameLogic::Protocol_LobbyStartGame(5)); + } + } +} + +bool GameSession::Attach(Utility::DynamicMemory::SmartPointer networkClient) +{ + if(!this->isCreated) return false; + if(this->GetClientCount() == this->clients.Capacity()) return false; + + networkClient->SetOwner(this); + + IPlayerData* playerData = this->gameInstance.CreatePlayer(); + if(!playerData) return false; + + SmartPointer gameClient = new GameClient(networkClient, playerData); + NetworkClient* nwClient = gameClient->GetClient(); + +// Send the level information + { + Protocol_LobbyCreateGame lcg((char)1, (char)0, this->description.mapName); + nwClient->Send(lcg); + } + +// Send the player data only + { + Protocol_ObjectCreatePlayer oc( playerData->GetPosition(), playerData->GetRotation(), playerData->GetScale(), + playerData->GetID(), true, playerData->GetTeamID(), + /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); + nwClient->Send(oc); + } + +// Send information about other clients + { for (unsigned int i = 0; i < this->clients.Size(); i++) { - if(this->clients[i]) + if(clients[i]) { - this->clients[i]->GetClient()->Send(GameLogic::Protocol_LobbyStartGame(5)); + IPlayerData* temp = clients[i]->GetPlayer(); + Protocol_ObjectCreatePlayer oc( temp->GetPosition(), temp->GetRotation(), temp->GetScale(), + temp->GetID(), false, temp->GetTeamID(), + /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); + nwClient->Send(oc); } } } - bool GameSession::Attach(Utility::DynamicMemory::SmartPointer client) +//TODO: Need to be able to get the current gameplay data from the logic, to sync it with the client { - if(!this->isCreated) return false; - if(this->GetClientCount() == this->clients.Capacity()) return false; - client->SetOwner(this); + } - IPlayerData* player = this->gameInstance.CreatePlayer(); - if(!player) return false; - - SmartPointer obj = new GameClient(client, player); - - // Send the chosen mesh name - Protocol_LobbyCreateGame lcg(obj->GetPlayer()->GetID(), "char_white.dan", obj->GetPlayer()->GetOrientation()); - obj->GetClient()->Send(lcg); - - // Send the player data only - for (unsigned int i = 0; i < this->clients.Capacity(); i++) - { - if(this->clients[i]) - { - IPlayerData* p = this->clients[i]->GetPlayer(); - Protocol_ObjectCreate oc(p->GetPosition(), p->GetRotation(), p->GetScale(), p->GetID(), "char_white.dan"); - //Protocol_ObjectCreatePlayer oc(p->GetPosition(), p->GetRotation(), p->GetScale(), p->GetID(), "char_white.dan"); - this->clients[i]->GetClient()->Send(oc); - } - } - - obj->GetClient()->Send(GameLogic::Protocol_LobbyStartGame(0)); - - for (unsigned int i = 0; i < this->clients.Size(); i++) +// Insert the new client to the update list + { + bool added = false; + for (unsigned int i = 0; !added && i < this->clients.Size(); i++) { if(!clients[i]) { - NetworkSession::clients[i] = client; - clients[i] = obj; - return true; + NetworkSession::clients[i] = networkClient; + clients[i] = gameClient; + added = true; } } - - return true; + if(!added) + { + NetworkSession::clients.Push( networkClient ); + clients.Push( gameClient ); + } } - - void GameSession::CloseSession( bool dissconnectClients ) +// Send the start signal { - this->worker.Terminate(); - NetworkSession::CloseSession(true); - this->clients.Clear(); + nwClient->Send(GameLogic::Protocol_LobbyStartGame(0)); } -}//End namespace DanBias + return true; +} + +void GameSession::CloseSession( bool dissconnectClients ) +{ + this->worker.Terminate(); + NetworkSession::CloseSession(true); + this->clients.Clear(); +} + diff --git a/Code/Network/NetworkAPI/NetworkClient.h b/Code/Network/NetworkAPI/NetworkClient.h index 58d81360..6f037117 100644 --- a/Code/Network/NetworkAPI/NetworkClient.h +++ b/Code/Network/NetworkAPI/NetworkClient.h @@ -133,13 +133,7 @@ namespace Oyster */ virtual void DataRecieved(NetEvent e); - /** ! Deprecate ! - * Do not use this furthermore, instead use void DataRecieved(NetEvent e); - * @see DataRecieved - */ - //virtual void NetworkCallback(Oyster::Network::CustomNetProtocol& p); - - virtual std::string GetIpAddress(); + std::string GetIpAddress(); private: NetworkClient(const NetworkClient& obj); From a36a26721deb35b47242e3f21ac71f7839d1d2cc Mon Sep 17 00:00:00 2001 From: Robin Engman Date: Tue, 18 Feb 2014 10:12:21 +0100 Subject: [PATCH 11/36] Added pre support for loading mesh shapes Will be used for triangle collision --- .../BulletFileLoader/CMakeLists.txt | 49 + .../BulletFileLoader/autogenerated/bullet.h | 1228 +++++++++++ .../Bullet Source/BulletFileLoader/bChunk.cpp | 75 + .../Bullet Source/BulletFileLoader/bChunk.h | 92 + .../Bullet Source/BulletFileLoader/bCommon.h | 39 + .../Bullet Source/BulletFileLoader/bDNA.cpp | 644 ++++++ .../Bullet Source/BulletFileLoader/bDNA.h | 110 + .../Bullet Source/BulletFileLoader/bDefines.h | 140 ++ .../Bullet Source/BulletFileLoader/bFile.cpp | 1757 +++++++++++++++ .../Bullet Source/BulletFileLoader/bFile.h | 165 ++ .../BulletFileLoader/btBulletFile.cpp | 423 ++++ .../BulletFileLoader/btBulletFile.h | 83 + .../BulletFileLoader/premake4.lua | 12 + .../BulletWorldImporter/CMakeLists.txt | 40 + .../btBulletWorldImporter.cpp | 362 ++++ .../btBulletWorldImporter.h | 68 + .../BulletWorldImporter/btWorldImporter.cpp | 1922 +++++++++++++++++ .../BulletWorldImporter/btWorldImporter.h | 212 ++ .../BulletWorldImporter/premake4.lua | 13 + Code/Physics/GamePhysics/GamePhysics.vcxproj | 8 +- .../Implementation/PhysicsAPI_Impl.cpp | 66 +- .../Implementation/PhysicsAPI_Impl.h | 2 + .../Implementation/SimpleRigidBody.cpp | 6 +- Code/Physics/GamePhysics/PhysicsAPI.h | 2 + 24 files changed, 7504 insertions(+), 14 deletions(-) create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/CMakeLists.txt create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/autogenerated/bullet.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bChunk.cpp create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bChunk.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bCommon.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bDNA.cpp create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bDNA.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bDefines.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bFile.cpp create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/bFile.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.cpp create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.h create mode 100644 Code/Physics/Bullet Source/BulletFileLoader/premake4.lua create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/CMakeLists.txt create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.cpp create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.h create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.cpp create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.h create mode 100644 Code/Physics/Bullet Source/BulletWorldImporter/premake4.lua diff --git a/Code/Physics/Bullet Source/BulletFileLoader/CMakeLists.txt b/Code/Physics/Bullet Source/BulletFileLoader/CMakeLists.txt new file mode 100644 index 00000000..51e33e44 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/CMakeLists.txt @@ -0,0 +1,49 @@ +INCLUDE_DIRECTORIES( + ${BULLET_PHYSICS_SOURCE_DIR}/src +) + +SET(BulletFileLoader_SRCS +bChunk.cpp +bDNA.cpp +bFile.cpp +btBulletFile.cpp +) + +SET(BulletFileLoader_HDRS +bChunk.h +bCommon.h +bDefines.h +bDNA.h +bFile.h +btBulletFile.h +) + +ADD_LIBRARY(BulletFileLoader ${BulletFileLoader_SRCS} ${BulletFileLoader_HDRS}) + +IF (BUILD_SHARED_LIBS) + TARGET_LINK_LIBRARIES(BulletFileLoader LinearMath) +ENDIF (BUILD_SHARED_LIBS) + +SET_TARGET_PROPERTIES(BulletFileLoader PROPERTIES VERSION ${BULLET_VERSION}) +SET_TARGET_PROPERTIES(BulletFileLoader PROPERTIES SOVERSION ${BULLET_VERSION}) + +IF (INSTALL_EXTRA_LIBS) + IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) + #FILES_MATCHING requires CMake 2.6 + IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletFileLoader DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletFileLoader DESTINATION lib${LIB_SUFFIX}) + INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.h" PATTERN +".svn" EXCLUDE PATTERN "CMakeFiles" EXCLUDE) + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + SET_TARGET_PROPERTIES(BulletFileLoader PROPERTIES FRAMEWORK true) + SET_TARGET_PROPERTIES(BulletFileLoader PROPERTIES PUBLIC_HEADER "${BulletFileLoader_HDRS}") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) +ENDIF (INSTALL_EXTRA_LIBS) diff --git a/Code/Physics/Bullet Source/BulletFileLoader/autogenerated/bullet.h b/Code/Physics/Bullet Source/BulletFileLoader/autogenerated/bullet.h new file mode 100644 index 00000000..2fe1d7fc --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/autogenerated/bullet.h @@ -0,0 +1,1228 @@ +/* Copyright (C) 2011 Erwin Coumans & Charlie C +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ +// Auto generated from Bullet/Extras/HeaderGenerator/bulletGenerate.py +#ifndef __BULLET_H__ +#define __BULLET_H__ +namespace Bullet { + +// put an empty struct in the case +typedef struct bInvalidHandle { + int unused; +}bInvalidHandle; + + class PointerArray; + class btPhysicsSystem; + class ListBase; + class btVector3FloatData; + class btVector3DoubleData; + class btMatrix3x3FloatData; + class btMatrix3x3DoubleData; + class btTransformFloatData; + class btTransformDoubleData; + class btBvhSubtreeInfoData; + class btOptimizedBvhNodeFloatData; + class btOptimizedBvhNodeDoubleData; + class btQuantizedBvhNodeData; + class btQuantizedBvhFloatData; + class btQuantizedBvhDoubleData; + class btCollisionShapeData; + class btStaticPlaneShapeData; + class btConvexInternalShapeData; + class btPositionAndRadius; + class btMultiSphereShapeData; + class btIntIndexData; + class btShortIntIndexData; + class btShortIntIndexTripletData; + class btCharIndexTripletData; + class btMeshPartData; + class btStridingMeshInterfaceData; + class btTriangleMeshShapeData; + class btScaledTriangleMeshShapeData; + class btCompoundShapeChildData; + class btCompoundShapeData; + class btCylinderShapeData; + class btConeShapeData; + class btCapsuleShapeData; + class btTriangleInfoData; + class btTriangleInfoMapData; + class btGImpactMeshShapeData; + class btConvexHullShapeData; + class btCollisionObjectDoubleData; + class btCollisionObjectFloatData; + class btDynamicsWorldDoubleData; + class btDynamicsWorldFloatData; + class btRigidBodyFloatData; + class btRigidBodyDoubleData; + class btConstraintInfo1; + class btTypedConstraintFloatData; + class btTypedConstraintData; + class btTypedConstraintDoubleData; + class btPoint2PointConstraintFloatData; + class btPoint2PointConstraintDoubleData2; + class btPoint2PointConstraintDoubleData; + class btHingeConstraintDoubleData; + class btHingeConstraintFloatData; + class btHingeConstraintDoubleData2; + class btConeTwistConstraintDoubleData; + class btConeTwistConstraintData; + class btGeneric6DofConstraintData; + class btGeneric6DofConstraintDoubleData2; + class btGeneric6DofSpringConstraintData; + class btGeneric6DofSpringConstraintDoubleData2; + class btSliderConstraintData; + class btSliderConstraintDoubleData; + class btGearConstraintFloatData; + class btGearConstraintDoubleData; + class btContactSolverInfoDoubleData; + class btContactSolverInfoFloatData; + class SoftBodyMaterialData; + class SoftBodyNodeData; + class SoftBodyLinkData; + class SoftBodyFaceData; + class SoftBodyTetraData; + class SoftRigidAnchorData; + class SoftBodyConfigData; + class SoftBodyPoseData; + class SoftBodyClusterData; + class btSoftBodyJointData; + class btSoftBodyFloatData; +// -------------------------------------------------- // + class PointerArray + { + public: + int m_size; + int m_capacity; + void *m_data; + }; + + +// -------------------------------------------------- // + class btPhysicsSystem + { + public: + PointerArray m_collisionShapes; + PointerArray m_collisionObjects; + PointerArray m_constraints; + }; + + +// -------------------------------------------------- // + class ListBase + { + public: + void *first; + void *last; + }; + + +// -------------------------------------------------- // + class btVector3FloatData + { + public: + float m_floats[4]; + }; + + +// -------------------------------------------------- // + class btVector3DoubleData + { + public: + double m_floats[4]; + }; + + +// -------------------------------------------------- // + class btMatrix3x3FloatData + { + public: + btVector3FloatData m_el[3]; + }; + + +// -------------------------------------------------- // + class btMatrix3x3DoubleData + { + public: + btVector3DoubleData m_el[3]; + }; + + +// -------------------------------------------------- // + class btTransformFloatData + { + public: + btMatrix3x3FloatData m_basis; + btVector3FloatData m_origin; + }; + + +// -------------------------------------------------- // + class btTransformDoubleData + { + public: + btMatrix3x3DoubleData m_basis; + btVector3DoubleData m_origin; + }; + + +// -------------------------------------------------- // + class btBvhSubtreeInfoData + { + public: + int m_rootNodeIndex; + int m_subtreeSize; + short m_quantizedAabbMin[3]; + short m_quantizedAabbMax[3]; + }; + + +// -------------------------------------------------- // + class btOptimizedBvhNodeFloatData + { + public: + btVector3FloatData m_aabbMinOrg; + btVector3FloatData m_aabbMaxOrg; + int m_escapeIndex; + int m_subPart; + int m_triangleIndex; + char m_pad[4]; + }; + + +// -------------------------------------------------- // + class btOptimizedBvhNodeDoubleData + { + public: + btVector3DoubleData m_aabbMinOrg; + btVector3DoubleData m_aabbMaxOrg; + int m_escapeIndex; + int m_subPart; + int m_triangleIndex; + char m_pad[4]; + }; + + +// -------------------------------------------------- // + class btQuantizedBvhNodeData + { + public: + short m_quantizedAabbMin[3]; + short m_quantizedAabbMax[3]; + int m_escapeIndexOrTriangleIndex; + }; + + +// -------------------------------------------------- // + class btQuantizedBvhFloatData + { + public: + btVector3FloatData m_bvhAabbMin; + btVector3FloatData m_bvhAabbMax; + btVector3FloatData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + btOptimizedBvhNodeFloatData *m_contiguousNodesPtr; + btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + btBvhSubtreeInfoData *m_subTreeInfoPtr; + int m_traversalMode; + int m_numSubtreeHeaders; + }; + + +// -------------------------------------------------- // + class btQuantizedBvhDoubleData + { + public: + btVector3DoubleData m_bvhAabbMin; + btVector3DoubleData m_bvhAabbMax; + btVector3DoubleData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + btOptimizedBvhNodeDoubleData *m_contiguousNodesPtr; + btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + int m_traversalMode; + int m_numSubtreeHeaders; + btBvhSubtreeInfoData *m_subTreeInfoPtr; + }; + + +// -------------------------------------------------- // + class btCollisionShapeData + { + public: + char *m_name; + int m_shapeType; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btStaticPlaneShapeData + { + public: + btCollisionShapeData m_collisionShapeData; + btVector3FloatData m_localScaling; + btVector3FloatData m_planeNormal; + float m_planeConstant; + char m_pad[4]; + }; + + +// -------------------------------------------------- // + class btConvexInternalShapeData + { + public: + btCollisionShapeData m_collisionShapeData; + btVector3FloatData m_localScaling; + btVector3FloatData m_implicitShapeDimensions; + float m_collisionMargin; + int m_padding; + }; + + +// -------------------------------------------------- // + class btPositionAndRadius + { + public: + btVector3FloatData m_pos; + float m_radius; + }; + + +// -------------------------------------------------- // + class btMultiSphereShapeData + { + public: + btConvexInternalShapeData m_convexInternalShapeData; + btPositionAndRadius *m_localPositionArrayPtr; + int m_localPositionArraySize; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btIntIndexData + { + public: + int m_value; + }; + + +// -------------------------------------------------- // + class btShortIntIndexData + { + public: + short m_value; + char m_pad[2]; + }; + + +// -------------------------------------------------- // + class btShortIntIndexTripletData + { + public: + short m_values[3]; + char m_pad[2]; + }; + + +// -------------------------------------------------- // + class btCharIndexTripletData + { + public: + char m_values[3]; + char m_pad; + }; + + +// -------------------------------------------------- // + class btMeshPartData + { + public: + btVector3FloatData *m_vertices3f; + btVector3DoubleData *m_vertices3d; + btIntIndexData *m_indices32; + btShortIntIndexTripletData *m_3indices16; + btCharIndexTripletData *m_3indices8; + btShortIntIndexData *m_indices16; + int m_numTriangles; + int m_numVertices; + }; + + +// -------------------------------------------------- // + class btStridingMeshInterfaceData + { + public: + btMeshPartData *m_meshPartsPtr; + btVector3FloatData m_scaling; + int m_numMeshParts; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btTriangleMeshShapeData + { + public: + btCollisionShapeData m_collisionShapeData; + btStridingMeshInterfaceData m_meshInterface; + btQuantizedBvhFloatData *m_quantizedFloatBvh; + btQuantizedBvhDoubleData *m_quantizedDoubleBvh; + btTriangleInfoMapData *m_triangleInfoMap; + float m_collisionMargin; + char m_pad3[4]; + }; + + +// -------------------------------------------------- // + class btScaledTriangleMeshShapeData + { + public: + btTriangleMeshShapeData m_trimeshShapeData; + btVector3FloatData m_localScaling; + }; + + +// -------------------------------------------------- // + class btCompoundShapeChildData + { + public: + btTransformFloatData m_transform; + btCollisionShapeData *m_childShape; + int m_childShapeType; + float m_childMargin; + }; + + +// -------------------------------------------------- // + class btCompoundShapeData + { + public: + btCollisionShapeData m_collisionShapeData; + btCompoundShapeChildData *m_childShapePtr; + int m_numChildShapes; + float m_collisionMargin; + }; + + +// -------------------------------------------------- // + class btCylinderShapeData + { + public: + btConvexInternalShapeData m_convexInternalShapeData; + int m_upAxis; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btConeShapeData + { + public: + btConvexInternalShapeData m_convexInternalShapeData; + int m_upIndex; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btCapsuleShapeData + { + public: + btConvexInternalShapeData m_convexInternalShapeData; + int m_upAxis; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btTriangleInfoData + { + public: + int m_flags; + float m_edgeV0V1Angle; + float m_edgeV1V2Angle; + float m_edgeV2V0Angle; + }; + + +// -------------------------------------------------- // + class btTriangleInfoMapData + { + public: + int *m_hashTablePtr; + int *m_nextPtr; + btTriangleInfoData *m_valueArrayPtr; + int *m_keyArrayPtr; + float m_convexEpsilon; + float m_planarEpsilon; + float m_equalVertexThreshold; + float m_edgeDistanceThreshold; + float m_zeroAreaThreshold; + int m_nextSize; + int m_hashTableSize; + int m_numValues; + int m_numKeys; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btGImpactMeshShapeData + { + public: + btCollisionShapeData m_collisionShapeData; + btStridingMeshInterfaceData m_meshInterface; + btVector3FloatData m_localScaling; + float m_collisionMargin; + int m_gimpactSubType; + }; + + +// -------------------------------------------------- // + class btConvexHullShapeData + { + public: + btConvexInternalShapeData m_convexInternalShapeData; + btVector3FloatData *m_unscaledPointsFloatPtr; + btVector3DoubleData *m_unscaledPointsDoublePtr; + int m_numUnscaledPoints; + char m_padding3[4]; + }; + + +// -------------------------------------------------- // + class btCollisionObjectDoubleData + { + public: + void *m_broadphaseHandle; + void *m_collisionShape; + btCollisionShapeData *m_rootCollisionShape; + char *m_name; + btTransformDoubleData m_worldTransform; + btTransformDoubleData m_interpolationWorldTransform; + btVector3DoubleData m_interpolationLinearVelocity; + btVector3DoubleData m_interpolationAngularVelocity; + btVector3DoubleData m_anisotropicFriction; + double m_contactProcessingThreshold; + double m_deactivationTime; + double m_friction; + double m_rollingFriction; + double m_restitution; + double m_hitFraction; + double m_ccdSweptSphereRadius; + double m_ccdMotionThreshold; + int m_hasAnisotropicFriction; + int m_collisionFlags; + int m_islandTag1; + int m_companionId; + int m_activationState1; + int m_internalType; + int m_checkCollideWith; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btCollisionObjectFloatData + { + public: + void *m_broadphaseHandle; + void *m_collisionShape; + btCollisionShapeData *m_rootCollisionShape; + char *m_name; + btTransformFloatData m_worldTransform; + btTransformFloatData m_interpolationWorldTransform; + btVector3FloatData m_interpolationLinearVelocity; + btVector3FloatData m_interpolationAngularVelocity; + btVector3FloatData m_anisotropicFriction; + float m_contactProcessingThreshold; + float m_deactivationTime; + float m_friction; + float m_rollingFriction; + float m_restitution; + float m_hitFraction; + float m_ccdSweptSphereRadius; + float m_ccdMotionThreshold; + int m_hasAnisotropicFriction; + int m_collisionFlags; + int m_islandTag1; + int m_companionId; + int m_activationState1; + int m_internalType; + int m_checkCollideWith; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btDynamicsWorldDoubleData + { + public: + btContactSolverInfoDoubleData m_solverInfo; + btVector3DoubleData m_gravity; + }; + + +// -------------------------------------------------- // + class btDynamicsWorldFloatData + { + public: + btContactSolverInfoFloatData m_solverInfo; + btVector3FloatData m_gravity; + }; + + +// -------------------------------------------------- // + class btRigidBodyFloatData + { + public: + btCollisionObjectFloatData m_collisionObjectData; + btMatrix3x3FloatData m_invInertiaTensorWorld; + btVector3FloatData m_linearVelocity; + btVector3FloatData m_angularVelocity; + btVector3FloatData m_angularFactor; + btVector3FloatData m_linearFactor; + btVector3FloatData m_gravity; + btVector3FloatData m_gravity_acceleration; + btVector3FloatData m_invInertiaLocal; + btVector3FloatData m_totalForce; + btVector3FloatData m_totalTorque; + float m_inverseMass; + float m_linearDamping; + float m_angularDamping; + float m_additionalDampingFactor; + float m_additionalLinearDampingThresholdSqr; + float m_additionalAngularDampingThresholdSqr; + float m_additionalAngularDampingFactor; + float m_linearSleepingThreshold; + float m_angularSleepingThreshold; + int m_additionalDamping; + }; + + +// -------------------------------------------------- // + class btRigidBodyDoubleData + { + public: + btCollisionObjectDoubleData m_collisionObjectData; + btMatrix3x3DoubleData m_invInertiaTensorWorld; + btVector3DoubleData m_linearVelocity; + btVector3DoubleData m_angularVelocity; + btVector3DoubleData m_angularFactor; + btVector3DoubleData m_linearFactor; + btVector3DoubleData m_gravity; + btVector3DoubleData m_gravity_acceleration; + btVector3DoubleData m_invInertiaLocal; + btVector3DoubleData m_totalForce; + btVector3DoubleData m_totalTorque; + double m_inverseMass; + double m_linearDamping; + double m_angularDamping; + double m_additionalDampingFactor; + double m_additionalLinearDampingThresholdSqr; + double m_additionalAngularDampingThresholdSqr; + double m_additionalAngularDampingFactor; + double m_linearSleepingThreshold; + double m_angularSleepingThreshold; + int m_additionalDamping; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btConstraintInfo1 + { + public: + int m_numConstraintRows; + int nub; + }; + + +// -------------------------------------------------- // + class btTypedConstraintFloatData + { + public: + btRigidBodyFloatData *m_rbA; + btRigidBodyFloatData *m_rbB; + char *m_name; + int m_objectType; + int m_userConstraintType; + int m_userConstraintId; + int m_needsFeedback; + float m_appliedImpulse; + float m_dbgDrawSize; + int m_disableCollisionsBetweenLinkedBodies; + int m_overrideNumSolverIterations; + float m_breakingImpulseThreshold; + int m_isEnabled; + }; + + +// -------------------------------------------------- // + class btTypedConstraintData + { + public: + bInvalidHandle *m_rbA; + bInvalidHandle *m_rbB; + char *m_name; + int m_objectType; + int m_userConstraintType; + int m_userConstraintId; + int m_needsFeedback; + float m_appliedImpulse; + float m_dbgDrawSize; + int m_disableCollisionsBetweenLinkedBodies; + int m_overrideNumSolverIterations; + float m_breakingImpulseThreshold; + int m_isEnabled; + }; + + +// -------------------------------------------------- // + class btTypedConstraintDoubleData + { + public: + btRigidBodyDoubleData *m_rbA; + btRigidBodyDoubleData *m_rbB; + char *m_name; + int m_objectType; + int m_userConstraintType; + int m_userConstraintId; + int m_needsFeedback; + double m_appliedImpulse; + double m_dbgDrawSize; + int m_disableCollisionsBetweenLinkedBodies; + int m_overrideNumSolverIterations; + double m_breakingImpulseThreshold; + int m_isEnabled; + char padding[4]; + }; + + +// -------------------------------------------------- // + class btPoint2PointConstraintFloatData + { + public: + btTypedConstraintData m_typeConstraintData; + btVector3FloatData m_pivotInA; + btVector3FloatData m_pivotInB; + }; + + +// -------------------------------------------------- // + class btPoint2PointConstraintDoubleData2 + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btVector3DoubleData m_pivotInA; + btVector3DoubleData m_pivotInB; + }; + + +// -------------------------------------------------- // + class btPoint2PointConstraintDoubleData + { + public: + btTypedConstraintData m_typeConstraintData; + btVector3DoubleData m_pivotInA; + btVector3DoubleData m_pivotInB; + }; + + +// -------------------------------------------------- // + class btHingeConstraintDoubleData + { + public: + btTypedConstraintData m_typeConstraintData; + btTransformDoubleData m_rbAFrame; + btTransformDoubleData m_rbBFrame; + int m_useReferenceFrameA; + int m_angularOnly; + int m_enableAngularMotor; + float m_motorTargetVelocity; + float m_maxMotorImpulse; + float m_lowerLimit; + float m_upperLimit; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; + }; + + +// -------------------------------------------------- // + class btHingeConstraintFloatData + { + public: + btTypedConstraintData m_typeConstraintData; + btTransformFloatData m_rbAFrame; + btTransformFloatData m_rbBFrame; + int m_useReferenceFrameA; + int m_angularOnly; + int m_enableAngularMotor; + float m_motorTargetVelocity; + float m_maxMotorImpulse; + float m_lowerLimit; + float m_upperLimit; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; + }; + + +// -------------------------------------------------- // + class btHingeConstraintDoubleData2 + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btTransformDoubleData m_rbAFrame; + btTransformDoubleData m_rbBFrame; + int m_useReferenceFrameA; + int m_angularOnly; + int m_enableAngularMotor; + double m_motorTargetVelocity; + double m_maxMotorImpulse; + double m_lowerLimit; + double m_upperLimit; + double m_limitSoftness; + double m_biasFactor; + double m_relaxationFactor; + char m_padding1[4]; + }; + + +// -------------------------------------------------- // + class btConeTwistConstraintDoubleData + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btTransformDoubleData m_rbAFrame; + btTransformDoubleData m_rbBFrame; + double m_swingSpan1; + double m_swingSpan2; + double m_twistSpan; + double m_limitSoftness; + double m_biasFactor; + double m_relaxationFactor; + double m_damping; + }; + + +// -------------------------------------------------- // + class btConeTwistConstraintData + { + public: + btTypedConstraintData m_typeConstraintData; + btTransformFloatData m_rbAFrame; + btTransformFloatData m_rbBFrame; + float m_swingSpan1; + float m_swingSpan2; + float m_twistSpan; + float m_limitSoftness; + float m_biasFactor; + float m_relaxationFactor; + float m_damping; + char m_pad[4]; + }; + + +// -------------------------------------------------- // + class btGeneric6DofConstraintData + { + public: + btTypedConstraintData m_typeConstraintData; + btTransformFloatData m_rbAFrame; + btTransformFloatData m_rbBFrame; + btVector3FloatData m_linearUpperLimit; + btVector3FloatData m_linearLowerLimit; + btVector3FloatData m_angularUpperLimit; + btVector3FloatData m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; + }; + + +// -------------------------------------------------- // + class btGeneric6DofConstraintDoubleData2 + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btTransformDoubleData m_rbAFrame; + btTransformDoubleData m_rbBFrame; + btVector3DoubleData m_linearUpperLimit; + btVector3DoubleData m_linearLowerLimit; + btVector3DoubleData m_angularUpperLimit; + btVector3DoubleData m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; + }; + + +// -------------------------------------------------- // + class btGeneric6DofSpringConstraintData + { + public: + btGeneric6DofConstraintData m_6dofData; + int m_springEnabled[6]; + float m_equilibriumPoint[6]; + float m_springStiffness[6]; + float m_springDamping[6]; + }; + + +// -------------------------------------------------- // + class btGeneric6DofSpringConstraintDoubleData2 + { + public: + btGeneric6DofConstraintDoubleData2 m_6dofData; + int m_springEnabled[6]; + double m_equilibriumPoint[6]; + double m_springStiffness[6]; + double m_springDamping[6]; + }; + + +// -------------------------------------------------- // + class btSliderConstraintData + { + public: + btTypedConstraintData m_typeConstraintData; + btTransformFloatData m_rbAFrame; + btTransformFloatData m_rbBFrame; + float m_linearUpperLimit; + float m_linearLowerLimit; + float m_angularUpperLimit; + float m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; + }; + + +// -------------------------------------------------- // + class btSliderConstraintDoubleData + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btTransformDoubleData m_rbAFrame; + btTransformDoubleData m_rbBFrame; + double m_linearUpperLimit; + double m_linearLowerLimit; + double m_angularUpperLimit; + double m_angularLowerLimit; + int m_useLinearReferenceFrameA; + int m_useOffsetForConstraintFrame; + }; + + +// -------------------------------------------------- // + class btGearConstraintFloatData + { + public: + btTypedConstraintFloatData m_typeConstraintData; + btVector3FloatData m_axisInA; + btVector3FloatData m_axisInB; + float m_ratio; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btGearConstraintDoubleData + { + public: + btTypedConstraintDoubleData m_typeConstraintData; + btVector3DoubleData m_axisInA; + btVector3DoubleData m_axisInB; + double m_ratio; + }; + + +// -------------------------------------------------- // + class btContactSolverInfoDoubleData + { + public: + double m_tau; + double m_damping; + double m_friction; + double m_timeStep; + double m_restitution; + double m_maxErrorReduction; + double m_sor; + double m_erp; + double m_erp2; + double m_globalCfm; + double m_splitImpulsePenetrationThreshold; + double m_splitImpulseTurnErp; + double m_linearSlop; + double m_warmstartingFactor; + double m_maxGyroscopicForce; + double m_singleAxisRollingFrictionThreshold; + int m_numIterations; + int m_solverMode; + int m_restingContactRestitutionThreshold; + int m_minimumSolverBatchSize; + int m_splitImpulse; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class btContactSolverInfoFloatData + { + public: + float m_tau; + float m_damping; + float m_friction; + float m_timeStep; + float m_restitution; + float m_maxErrorReduction; + float m_sor; + float m_erp; + float m_erp2; + float m_globalCfm; + float m_splitImpulsePenetrationThreshold; + float m_splitImpulseTurnErp; + float m_linearSlop; + float m_warmstartingFactor; + float m_maxGyroscopicForce; + float m_singleAxisRollingFrictionThreshold; + int m_numIterations; + int m_solverMode; + int m_restingContactRestitutionThreshold; + int m_minimumSolverBatchSize; + int m_splitImpulse; + char m_padding[4]; + }; + + +// -------------------------------------------------- // + class SoftBodyMaterialData + { + public: + float m_linearStiffness; + float m_angularStiffness; + float m_volumeStiffness; + int m_flags; + }; + + +// -------------------------------------------------- // + class SoftBodyNodeData + { + public: + SoftBodyMaterialData *m_material; + btVector3FloatData m_position; + btVector3FloatData m_previousPosition; + btVector3FloatData m_velocity; + btVector3FloatData m_accumulatedForce; + btVector3FloatData m_normal; + float m_inverseMass; + float m_area; + int m_attach; + int m_pad; + }; + + +// -------------------------------------------------- // + class SoftBodyLinkData + { + public: + SoftBodyMaterialData *m_material; + int m_nodeIndices[2]; + float m_restLength; + int m_bbending; + }; + + +// -------------------------------------------------- // + class SoftBodyFaceData + { + public: + btVector3FloatData m_normal; + SoftBodyMaterialData *m_material; + int m_nodeIndices[3]; + float m_restArea; + }; + + +// -------------------------------------------------- // + class SoftBodyTetraData + { + public: + btVector3FloatData m_c0[4]; + SoftBodyMaterialData *m_material; + int m_nodeIndices[4]; + float m_restVolume; + float m_c1; + float m_c2; + int m_pad; + }; + + +// -------------------------------------------------- // + class SoftRigidAnchorData + { + public: + btMatrix3x3FloatData m_c0; + btVector3FloatData m_c1; + btVector3FloatData m_localFrame; + bInvalidHandle *m_rigidBody; + int m_nodeIndex; + float m_c2; + }; + + +// -------------------------------------------------- // + class SoftBodyConfigData + { + public: + int m_aeroModel; + float m_baumgarte; + float m_damping; + float m_drag; + float m_lift; + float m_pressure; + float m_volume; + float m_dynamicFriction; + float m_poseMatch; + float m_rigidContactHardness; + float m_kineticContactHardness; + float m_softContactHardness; + float m_anchorHardness; + float m_softRigidClusterHardness; + float m_softKineticClusterHardness; + float m_softSoftClusterHardness; + float m_softRigidClusterImpulseSplit; + float m_softKineticClusterImpulseSplit; + float m_softSoftClusterImpulseSplit; + float m_maxVolume; + float m_timeScale; + int m_velocityIterations; + int m_positionIterations; + int m_driftIterations; + int m_clusterIterations; + int m_collisionFlags; + }; + + +// -------------------------------------------------- // + class SoftBodyPoseData + { + public: + btMatrix3x3FloatData m_rot; + btMatrix3x3FloatData m_scale; + btMatrix3x3FloatData m_aqq; + btVector3FloatData m_com; + btVector3FloatData *m_positions; + float *m_weights; + int m_numPositions; + int m_numWeigts; + int m_bvolume; + int m_bframe; + float m_restVolume; + int m_pad; + }; + + +// -------------------------------------------------- // + class SoftBodyClusterData + { + public: + btTransformFloatData m_framexform; + btMatrix3x3FloatData m_locii; + btMatrix3x3FloatData m_invwi; + btVector3FloatData m_com; + btVector3FloatData m_vimpulses[2]; + btVector3FloatData m_dimpulses[2]; + btVector3FloatData m_lv; + btVector3FloatData m_av; + btVector3FloatData *m_framerefs; + int *m_nodeIndices; + float *m_masses; + int m_numFrameRefs; + int m_numNodes; + int m_numMasses; + float m_idmass; + float m_imass; + int m_nvimpulses; + int m_ndimpulses; + float m_ndamping; + float m_ldamping; + float m_adamping; + float m_matching; + float m_maxSelfCollisionImpulse; + float m_selfCollisionImpulseFactor; + int m_containsAnchor; + int m_collide; + int m_clusterIndex; + }; + + +// -------------------------------------------------- // + class btSoftBodyJointData + { + public: + void *m_bodyA; + void *m_bodyB; + btVector3FloatData m_refs[2]; + float m_cfm; + float m_erp; + float m_split; + int m_delete; + btVector3FloatData m_relPosition[2]; + int m_bodyAtype; + int m_bodyBtype; + int m_jointType; + int m_pad; + }; + + +// -------------------------------------------------- // + class btSoftBodyFloatData + { + public: + btCollisionObjectFloatData m_collisionObjectData; + SoftBodyPoseData *m_pose; + SoftBodyMaterialData **m_materials; + SoftBodyNodeData *m_nodes; + SoftBodyLinkData *m_links; + SoftBodyFaceData *m_faces; + SoftBodyTetraData *m_tetrahedra; + SoftRigidAnchorData *m_anchors; + SoftBodyClusterData *m_clusters; + btSoftBodyJointData *m_joints; + int m_numMaterials; + int m_numNodes; + int m_numLinks; + int m_numFaces; + int m_numTetrahedra; + int m_numAnchors; + int m_numClusters; + int m_numJoints; + SoftBodyConfigData m_config; + }; + + +} +#endif//__BULLET_H__ \ No newline at end of file diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bChunk.cpp b/Code/Physics/Bullet Source/BulletFileLoader/bChunk.cpp new file mode 100644 index 00000000..564e5507 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bChunk.cpp @@ -0,0 +1,75 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#include "bChunk.h" +#include "bDefines.h" +#include "bFile.h" + +#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) +#include +#endif +#include + + +using namespace bParse; + + +// ----------------------------------------------------- // +short ChunkUtils::swapShort(short sht) +{ + SWITCH_SHORT(sht); + return sht; +} + +// ----------------------------------------------------- // +int ChunkUtils::swapInt(int inte) +{ + SWITCH_INT(inte); + return inte; +} + +// ----------------------------------------------------- // +long64 ChunkUtils::swapLong64(long64 lng) +{ + SWITCH_LONGINT(lng); + return lng; +} + +// ----------------------------------------------------- // +int ChunkUtils::getOffset(int flags) +{ + // if the file is saved in a + // different format, get the + // file's chunk size + int res = CHUNK_HEADER_LEN; + + if (VOID_IS_8) + { + if (flags &FD_BITS_VARIES) + res = sizeof(bChunkPtr4); + } + else + { + if (flags &FD_BITS_VARIES) + res = sizeof(bChunkPtr8); + } + return res; +} + + + + + +//eof diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bChunk.h b/Code/Physics/Bullet Source/BulletFileLoader/bChunk.h new file mode 100644 index 00000000..77039bcf --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bChunk.h @@ -0,0 +1,92 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef __BCHUNK_H__ +#define __BCHUNK_H__ + +#if defined (_WIN32) && ! defined (__MINGW32__) + #define long64 __int64 +#elif defined (__MINGW32__) + #include + #define long64 int64_t +#else + #define long64 long long +#endif + + +namespace bParse { + + + // ----------------------------------------------------- // + class bChunkPtr4 + { + public: + bChunkPtr4(){} + int code; + int len; + union + { + int m_uniqueInt; + }; + int dna_nr; + int nr; + }; + + // ----------------------------------------------------- // + class bChunkPtr8 + { + public: + bChunkPtr8(){} + int code, len; + union + { + long64 oldPrev; + int m_uniqueInts[2]; + }; + int dna_nr, nr; + }; + + // ----------------------------------------------------- // + class bChunkInd + { + public: + bChunkInd(){} + int code, len; + void *oldPtr; + int dna_nr, nr; + }; + + + // ----------------------------------------------------- // + class ChunkUtils + { + public: + + // file chunk offset + static int getOffset(int flags); + + // endian utils + static short swapShort(short sht); + static int swapInt(int inte); + static long64 swapLong64(long64 lng); + + }; + + + const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd))); + const bool VOID_IS_8 = ((sizeof(void*)==8)); +} + +#endif//__BCHUNK_H__ diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bCommon.h b/Code/Physics/Bullet Source/BulletFileLoader/bCommon.h new file mode 100644 index 00000000..b01d2b89 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bCommon.h @@ -0,0 +1,39 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef __BCOMMON_H__ +#define __BCOMMON_H__ + + +#include +//#include "bLog.h" +#include "LinearMath/btAlignedObjectArray.h" +#include "LinearMath/btHashMap.h" + +namespace bParse { + + class bMain; + class bFileData; + class bFile; + class bDNA; + + // delete void* undefined + typedef struct bStructHandle {int unused;}bStructHandle; + typedef btAlignedObjectArray bListBasePtr; + typedef btHashMap bPtrMap; +} + + +#endif//__BCOMMON_H__ diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bDNA.cpp b/Code/Physics/Bullet Source/BulletFileLoader/bDNA.cpp new file mode 100644 index 00000000..a362767b --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bDNA.cpp @@ -0,0 +1,644 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ +#include + +#include "bDNA.h" +#include "bChunk.h" +#include +#include +#include + +//this define will force traversal of structures, to check backward (and forward) compatibility +//#define TEST_BACKWARD_FORWARD_COMPATIBILITY + + +using namespace bParse; + + +// ----------------------------------------------------- // +bDNA::bDNA() + : mPtrLen(0) +{ + // -- +} + +// ----------------------------------------------------- // +bDNA::~bDNA() +{ + // -- +} + +// ----------------------------------------------------- // +bool bDNA::lessThan(bDNA *file) +{ + return ( m_Names.size() < file->m_Names.size()); +} + +// ----------------------------------------------------- // +char *bDNA::getName(int ind) +{ + assert(ind <= (int)m_Names.size()); + return m_Names[ind].m_name; +} + + +// ----------------------------------------------------- // +char *bDNA::getType(int ind) +{ + assert(ind<= (int)mTypes.size()); + return mTypes[ind]; +} + + +// ----------------------------------------------------- // +short *bDNA::getStruct(int ind) +{ + assert(ind <= (int)mStructs.size()); + return mStructs[ind]; +} + + +// ----------------------------------------------------- // +short bDNA::getLength(int ind) +{ + assert(ind <= (int)mTlens.size()); + return mTlens[ind]; +} + + +// ----------------------------------------------------- // +int bDNA::getReverseType(short type) +{ + + int* intPtr = mStructReverse.find(type); + if (intPtr) + return *intPtr; + + return -1; +} + +// ----------------------------------------------------- // +int bDNA::getReverseType(const char *type) +{ + + btHashString key(type); + int* valuePtr = mTypeLookup.find(key); + if (valuePtr) + return *valuePtr; + + return -1; +} + +// ----------------------------------------------------- // +int bDNA::getNumStructs() +{ + return (int)mStructs.size(); +} + +// ----------------------------------------------------- // +bool bDNA::flagNotEqual(int dna_nr) +{ + assert(dna_nr <= (int)mCMPFlags.size()); + return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU; +} + +// ----------------------------------------------------- // +bool bDNA::flagEqual(int dna_nr) +{ + assert(dna_nr <= (int)mCMPFlags.size()); + int flag = mCMPFlags[dna_nr]; + return flag == FDF_STRUCT_EQU; +} + +// ----------------------------------------------------- // +bool bDNA::flagNone(int dna_nr) +{ + assert(dna_nr <= (int)mCMPFlags.size()); + return mCMPFlags[dna_nr] == FDF_NONE; +} + +// ----------------------------------------------------- // +int bDNA::getPointerSize() +{ + return mPtrLen; +} + +// ----------------------------------------------------- // +void bDNA::initRecurseCmpFlags(int iter) +{ + // iter is FDF_STRUCT_NEQU + + short *oldStrc = mStructs[iter]; + short type = oldStrc[0]; + + for (int i=0; i<(int)mStructs.size(); i++) + { + if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU ) + { + short *curStruct = mStructs[i]; + int eleLen = curStruct[1]; + curStruct+=2; + + for (int j=0; jgetReverseType(typeName); + if (newLookup == -1) + { + mCMPFlags[i] = FDF_NONE; + continue; + } + short *curStruct = memDNA->mStructs[newLookup]; +#else + // memory for file + + if (oldLookup < memDNA->mStructs.size()) + { + short *curStruct = memDNA->mStructs[oldLookup]; +#endif + + + + // rebuild... + mCMPFlags[i] = FDF_STRUCT_NEQU; + +#ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY + + if (curStruct[1] == oldStruct[1]) + { + // type len same ... + if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]]) + { + bool isSame = true; + int elementLength = oldStruct[1]; + + + curStruct+=2; + oldStruct+=2; + + + for (int j=0; jmTypes[curStruct[0]])!=0) + { + isSame=false; + break; + } + + // name the same + if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name)!=0) + { + isSame=false; + break; + } + } + // flag valid == + if (isSame) + mCMPFlags[i] = FDF_STRUCT_EQU; + } + } +#endif + } + } + + + + + + // recurse in + for ( i=0; i<(int)mStructs.size(); i++) + { + if (mCMPFlags[i] == FDF_STRUCT_NEQU) + initRecurseCmpFlags(i); + } +} + + + + +static int name_is_array(char* name, int* dim1, int* dim2) { + int len = strlen(name); + /*fprintf(stderr,"[%s]",name);*/ + /*if (len >= 1) { + if (name[len-1] != ']') + return 1; + } + return 0;*/ + char *bp; + int num; + if (dim1) { + *dim1 = 1; + } + if (dim2) { + *dim2 = 1; + } + bp = strchr(name, '['); + if (!bp) { + return 0; + } + num = 0; + while (++bp < name+len-1) { + const char c = *bp; + if (c == ']') { + break; + } + if (c <= '9' && c >= '0') { + num *= 10; + num += (c - '0'); + } else { + printf("array parse error.\n"); + return 0; + } + } + if (dim2) { + *dim2 = num; + } + + /* find second dim, if any. */ + bp = strchr(bp, '['); + if (!bp) { + return 1; /* at least we got the first dim. */ + } + num = 0; + while (++bp < name+len-1) { + const char c = *bp; + if (c == ']') { + break; + } + if (c <= '9' && c >= '0') { + num *= 10; + num += (c - '0'); + } else { + printf("array2 parse error.\n"); + return 1; + } + } + if (dim1) { + if (dim2) { + *dim1 = *dim2; + *dim2 = num; + } else { + *dim1 = num; + } + } + + return 1; +} + + +// ----------------------------------------------------- // +void bDNA::init(char *data, int len, bool swap) +{ + int *intPtr=0;short *shtPtr=0; + char *cp = 0;int dataLen =0;long nr=0; + intPtr = (int*)data; + + /* + SDNA (4 bytes) (magic number) + NAME (4 bytes) + (4 bytes) amount of names (int) + + + */ + + if (strncmp(data, "SDNA", 4)==0) + { + // skip ++ NAME + intPtr++; intPtr++; + } + + + + // Parse names + if (swap) + { + *intPtr = ChunkUtils::swapInt(*intPtr); + } + dataLen = *intPtr; + intPtr++; + + cp = (char*)intPtr; + int i; + for ( i=0; i amount of types (int) + + + */ + + intPtr = (int*)cp; + assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + + if (swap) + { + *intPtr = ChunkUtils::swapInt(*intPtr); + } + dataLen = *intPtr; + intPtr++; + + cp = (char*)intPtr; + for ( i=0; i (short) the lengths of types + + */ + + // Parse type lens + intPtr = (int*)cp; + assert(strncmp(cp, "TLEN", 4)==0); intPtr++; + + dataLen = (int)mTypes.size(); + + shtPtr = (short*)intPtr; + for ( i=0; i amount of structs (int) + + + + + + + */ + + intPtr = (int*)shtPtr; + cp = (char*)intPtr; + assert(strncmp(cp, "STRC", 4)==0); intPtr++; + + if (swap) + { + *intPtr = ChunkUtils::swapInt(*intPtr); + } + dataLen = *intPtr; + intPtr++; + + + shtPtr = (short*)intPtr; + for ( i=0; itypes_count; ++i) { + /* if (!bf->types[i].is_struct)*/ + { + printf("%3d: sizeof(%s%s)=%d", + i, + bf->types[i].is_struct ? "struct " : "atomic ", + bf->types[i].name, bf->types[i].size); + if (bf->types[i].is_struct) { + int j; + printf(", %d fields: { ", bf->types[i].fieldtypes_count); + for (j=0; jtypes[i].fieldtypes_count; ++j) { + printf("%s %s", + bf->types[bf->types[i].fieldtypes[j]].name, + bf->names[bf->types[i].fieldnames[j]]); + if (j == bf->types[i].fieldtypes_count-1) { + printf(";}"); + } else { + printf("; "); + } + } + } + printf("\n\n"); + + } + } +#endif + +} + + + + +//eof + + diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bDNA.h b/Code/Physics/Bullet Source/BulletFileLoader/bDNA.h new file mode 100644 index 00000000..691080bf --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bDNA.h @@ -0,0 +1,110 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef __BDNA_H__ +#define __BDNA_H__ + + +#include "bCommon.h" + +namespace bParse { + + struct bNameInfo + { + char* m_name; + bool m_isPointer; + int m_dim0; + int m_dim1; + }; + + class bDNA + { + public: + bDNA(); + ~bDNA(); + + void init(char *data, int len, bool swap=false); + + int getArraySize(char* str); + int getArraySizeNew(short name) + { + const bNameInfo& nameInfo = m_Names[name]; + return nameInfo.m_dim0*nameInfo.m_dim1; + } + int getElementSize(short type, short name) + { + const bNameInfo& nameInfo = m_Names[name]; + int size = nameInfo.m_isPointer ? mPtrLen*nameInfo.m_dim0*nameInfo.m_dim1 : mTlens[type]*nameInfo.m_dim0*nameInfo.m_dim1; + return size; + } + + int getNumNames() const + { + return m_Names.size(); + } + + char *getName(int ind); + char *getType(int ind); + short *getStruct(int ind); + short getLength(int ind); + int getReverseType(short type); + int getReverseType(const char *type); + + + int getNumStructs(); + + // + bool lessThan(bDNA* other); + + void initCmpFlags(bDNA *memDNA); + bool flagNotEqual(int dna_nr); + bool flagEqual(int dna_nr); + bool flagNone(int dna_nr); + + + int getPointerSize(); + + void dumpTypeDefinitions(); + + + private: + enum FileDNAFlags + { + FDF_NONE=0, + FDF_STRUCT_NEQU, + FDF_STRUCT_EQU + }; + + void initRecurseCmpFlags(int i); + + btAlignedObjectArray mCMPFlags; + + btAlignedObjectArray m_Names; + btAlignedObjectArray mTypes; + btAlignedObjectArray mStructs; + btAlignedObjectArray mTlens; + btHashMap mStructReverse; + btHashMap mTypeLookup; + + int mPtrLen; + + + + + }; +} + + +#endif//__BDNA_H__ diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bDefines.h b/Code/Physics/Bullet Source/BulletFileLoader/bDefines.h new file mode 100644 index 00000000..238df7d4 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bDefines.h @@ -0,0 +1,140 @@ +/* Copyright (C) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ +#ifndef __B_DEFINES_H__ +#define __B_DEFINES_H__ + + +// MISC defines, see BKE_global.h, BKE_utildefines.h +#define SIZEOFBLENDERHEADER 12 + + +// ------------------------------------------------------------ +#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) +# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) +#else +# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) +#endif + + +// ------------------------------------------------------------ +#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__) +# define MAKE_ID2(c, d) ( (c)<<8 | (d) ) +# define MOST_SIG_BYTE 0 +# define BBIG_ENDIAN +#else +# define MAKE_ID2(c, d) ( (d)<<8 | (c) ) +# define MOST_SIG_BYTE 1 +# define BLITTLE_ENDIAN +#endif + +// ------------------------------------------------------------ +#define ID_SCE MAKE_ID2('S', 'C') +#define ID_LI MAKE_ID2('L', 'I') +#define ID_OB MAKE_ID2('O', 'B') +#define ID_ME MAKE_ID2('M', 'E') +#define ID_CU MAKE_ID2('C', 'U') +#define ID_MB MAKE_ID2('M', 'B') +#define ID_MA MAKE_ID2('M', 'A') +#define ID_TE MAKE_ID2('T', 'E') +#define ID_IM MAKE_ID2('I', 'M') +#define ID_IK MAKE_ID2('I', 'K') +#define ID_WV MAKE_ID2('W', 'V') +#define ID_LT MAKE_ID2('L', 'T') +#define ID_SE MAKE_ID2('S', 'E') +#define ID_LF MAKE_ID2('L', 'F') +#define ID_LA MAKE_ID2('L', 'A') +#define ID_CA MAKE_ID2('C', 'A') +#define ID_IP MAKE_ID2('I', 'P') +#define ID_KE MAKE_ID2('K', 'E') +#define ID_WO MAKE_ID2('W', 'O') +#define ID_SCR MAKE_ID2('S', 'R') +#define ID_VF MAKE_ID2('V', 'F') +#define ID_TXT MAKE_ID2('T', 'X') +#define ID_SO MAKE_ID2('S', 'O') +#define ID_SAMPLE MAKE_ID2('S', 'A') +#define ID_GR MAKE_ID2('G', 'R') +#define ID_ID MAKE_ID2('I', 'D') +#define ID_AR MAKE_ID2('A', 'R') +#define ID_AC MAKE_ID2('A', 'C') +#define ID_SCRIPT MAKE_ID2('P', 'Y') +#define ID_FLUIDSIM MAKE_ID2('F', 'S') +#define ID_NT MAKE_ID2('N', 'T') +#define ID_BR MAKE_ID2('B', 'R') + + +#define ID_SEQ MAKE_ID2('S', 'Q') +#define ID_CO MAKE_ID2('C', 'O') +#define ID_PO MAKE_ID2('A', 'C') +#define ID_NLA MAKE_ID2('N', 'L') + +#define ID_VS MAKE_ID2('V', 'S') +#define ID_VN MAKE_ID2('V', 'N') + + +// ------------------------------------------------------------ +#define FORM MAKE_ID('F','O','R','M') +#define DDG1 MAKE_ID('3','D','G','1') +#define DDG2 MAKE_ID('3','D','G','2') +#define DDG3 MAKE_ID('3','D','G','3') +#define DDG4 MAKE_ID('3','D','G','4') +#define GOUR MAKE_ID('G','O','U','R') +#define BLEN MAKE_ID('B','L','E','N') +#define DER_ MAKE_ID('D','E','R','_') +#define V100 MAKE_ID('V','1','0','0') +#define DATA MAKE_ID('D','A','T','A') +#define GLOB MAKE_ID('G','L','O','B') +#define IMAG MAKE_ID('I','M','A','G') +#define TEST MAKE_ID('T','E','S','T') +#define USER MAKE_ID('U','S','E','R') + + +// ------------------------------------------------------------ +#define DNA1 MAKE_ID('D','N','A','1') +#define REND MAKE_ID('R','E','N','D') +#define ENDB MAKE_ID('E','N','D','B') +#define NAME MAKE_ID('N','A','M','E') +#define SDNA MAKE_ID('S','D','N','A') +#define TYPE MAKE_ID('T','Y','P','E') +#define TLEN MAKE_ID('T','L','E','N') +#define STRC MAKE_ID('S','T','R','C') + + +// ------------------------------------------------------------ +#define SWITCH_INT(a) { \ + char s_i, *p_i; \ + p_i= (char *)&(a); \ + s_i=p_i[0]; p_i[0]=p_i[3]; p_i[3]=s_i; \ + s_i=p_i[1]; p_i[1]=p_i[2]; p_i[2]=s_i; } + +// ------------------------------------------------------------ +#define SWITCH_SHORT(a) { \ + char s_i, *p_i; \ + p_i= (char *)&(a); \ + s_i=p_i[0]; p_i[0]=p_i[1]; p_i[1]=s_i; } + +// ------------------------------------------------------------ +#define SWITCH_LONGINT(a) { \ + char s_i, *p_i; \ + p_i= (char *)&(a); \ + s_i=p_i[0]; p_i[0]=p_i[7]; p_i[7]=s_i; \ + s_i=p_i[1]; p_i[1]=p_i[6]; p_i[6]=s_i; \ + s_i=p_i[2]; p_i[2]=p_i[5]; p_i[5]=s_i; \ + s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; } + +#endif//__B_DEFINES_H__ diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bFile.cpp b/Code/Physics/Bullet Source/BulletFileLoader/bFile.cpp new file mode 100644 index 00000000..c0e256fc --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bFile.cpp @@ -0,0 +1,1757 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ +#include "bFile.h" +#include "bCommon.h" +#include "bChunk.h" +#include "bDNA.h" +#include +#include +#include +#include "bDefines.h" +#include "LinearMath/btSerializer.h" +#include "LinearMath/btAlignedAllocator.h" +#include "LinearMath/btMinMax.h" + +#define SIZEOFBLENDERHEADER 12 +#define MAX_ARRAY_LENGTH 512 +using namespace bParse; +#define MAX_STRLEN 1024 + +const char* getCleanName(const char* memName, char* buffer) +{ + int slen = strlen(memName); + assert(slen 0) + { + if (strncmp((tempBuffer + ChunkUtils::getOffset(mFlags)), "SDNANAME", 8) ==0) + dna.oldPtr = (tempBuffer + ChunkUtils::getOffset(mFlags)); + else dna.oldPtr = 0; + } + else dna.oldPtr = 0; + } + // Some Bullet files are missing the DNA1 block + // In Blender it's DNA1 + ChunkUtils::getOffset() + SDNA + NAME + // In Bullet tests its SDNA + NAME + else if (strncmp(tempBuffer, "SDNANAME", 8) ==0) + { + dna.oldPtr = blenderData + i; + dna.len = mFileLen-i; + + // Also no REND block, so exit now. + if (mVersion==276) break; + } + + if (mDataStart && dna.oldPtr) break; + tempBuffer++; + } + if (!dna.oldPtr || !dna.len) + { + //printf("Failed to find DNA1+SDNA pair\n"); + mFlags &= ~FD_OK; + return; + } + + + mFileDNA = new bDNA(); + + + ///mFileDNA->init will convert part of DNA file endianness to current CPU endianness if necessary + mFileDNA->init((char*)dna.oldPtr, dna.len, (mFlags & FD_ENDIAN_SWAP)!=0); + + + if (mVersion==276) + { + int i; + for (i=0;igetNumNames();i++) + { + if (strcmp(mFileDNA->getName(i),"int")==0) + { + mFlags |= FD_BROKEN_DNA; + } + } + if ((mFlags&FD_BROKEN_DNA)!=0) + { + //printf("warning: fixing some broken DNA version\n"); + } + } + + + + if (verboseMode & FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS) + mFileDNA->dumpTypeDefinitions(); + + mMemoryDNA = new bDNA(); + int littleEndian= 1; + littleEndian= ((char*)&littleEndian)[0]; + + mMemoryDNA->init(memDna,memDnaLength,littleEndian==0); + + + + + ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files + if (mMemoryDNA->getNumNames() != mFileDNA->getNumNames()) + { + mFlags |= FD_VERSION_VARIES; + //printf ("Warning, file DNA is different than built in, performance is reduced. Best to re-export file with a matching version/platform"); + } + + // as long as it kept up to date it will be ok!! + if (mMemoryDNA->lessThan(mFileDNA)) + { + //printf ("Warning, file DNA is newer than built in."); + } + + + mFileDNA->initCmpFlags(mMemoryDNA); + + parseData(); + + resolvePointers(verboseMode); + + updateOldPointers(); + + +} + + + +// ----------------------------------------------------- // +void bFile::swap(char *head, bChunkInd& dataChunk, bool ignoreEndianFlag) +{ + char *data = head; + short *strc = mFileDNA->getStruct(dataChunk.dna_nr); + + + + const char s[] = "SoftBodyMaterialData"; + int szs = sizeof(s); + if (strncmp((char*)&dataChunk.code,"ARAY",4)==0) + { + short *oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); + char *oldType = mFileDNA->getType(oldStruct[0]); + if (strncmp(oldType,s,szs)==0) + { + return; + } + } + + + int len = mFileDNA->getLength(strc[0]); + + for (int i=0; icode & 0xFFFF)==0) + c->code >>=16; + SWITCH_INT(c->len); + SWITCH_INT(c->dna_nr); + SWITCH_INT(c->nr); + } else + { + bChunkPtr8* c = (bChunkPtr8*) dataPtr; + if ((c->code & 0xFFFF)==0) + c->code >>=16; + SWITCH_INT(c->len); + SWITCH_INT(c->dna_nr); + SWITCH_INT(c->nr); + + } + } else + { + if (mFlags &FD_BITS_VARIES) + { + bChunkPtr8*c = (bChunkPtr8*) dataPtr; + if ((c->code & 0xFFFF)==0) + c->code >>=16; + SWITCH_INT(c->len); + SWITCH_INT(c->dna_nr); + SWITCH_INT(c->nr); + + } else + { + bChunkPtr4* c = (bChunkPtr4*) dataPtr; + if ((c->code & 0xFFFF)==0) + c->code >>=16; + SWITCH_INT(c->len); + + SWITCH_INT(c->dna_nr); + SWITCH_INT(c->nr); + + } + } + +} + + +void bFile::swapDNA(char* ptr) +{ + bool swap = ((mFlags & FD_ENDIAN_SWAP)!=0); + + char* data = &ptr[20]; +// void bDNA::init(char *data, int len, bool swap) + int *intPtr=0;short *shtPtr=0; + char *cp = 0;int dataLen =0;long nr=0; + intPtr = (int*)data; + + /* + SDNA (4 bytes) (magic number) + NAME (4 bytes) + (4 bytes) amount of names (int) + + + */ + + if (strncmp(data, "SDNA", 4)==0) + { + // skip ++ NAME + intPtr++; intPtr++; + } + + + + // Parse names + if (swap) + dataLen = ChunkUtils::swapInt(*intPtr); + else + dataLen = *intPtr; + + *intPtr = ChunkUtils::swapInt(*intPtr); + intPtr++; + + cp = (char*)intPtr; + int i; + for ( i=0; i amount of types (int) + + + */ + + intPtr = (int*)cp; + assert(strncmp(cp, "TYPE", 4)==0); intPtr++; + + if (swap) + dataLen = ChunkUtils::swapInt(*intPtr); + else + dataLen = *intPtr; + + *intPtr = ChunkUtils::swapInt(*intPtr); + + intPtr++; + + cp = (char*)intPtr; + for ( i=0; i (short) the lengths of types + + */ + + // Parse type lens + intPtr = (int*)cp; + assert(strncmp(cp, "TLEN", 4)==0); intPtr++; + + + shtPtr = (short*)intPtr; + for ( i=0; i amount of structs (int) + + + + + + + */ + + intPtr = (int*)shtPtr; + cp = (char*)intPtr; + assert(strncmp(cp, "STRC", 4)==0); + intPtr++; + + if (swap) + dataLen = ChunkUtils::swapInt(*intPtr); + else + dataLen = *intPtr; + + *intPtr = ChunkUtils::swapInt(*intPtr); + + intPtr++; + + + shtPtr = (short*)intPtr; + for ( i=0; i=0) + { + swap(dataPtrHead, dataChunk,ignoreEndianFlag); + } else + { + printf("unknown chunk\n"); + } + } + + // next please! + dataPtr += seek; + + seek = getNextBlock(&dataChunk, dataPtr, mFlags); + if (seek < 0) + break; + } + + if (mFlags & FD_ENDIAN_SWAP) + { + mFlags &= ~FD_ENDIAN_SWAP; + } else + { + mFlags |= FD_ENDIAN_SWAP; + } + + + +} + + +// ----------------------------------------------------- // +char* bFile::readStruct(char *head, bChunkInd& dataChunk) +{ + bool ignoreEndianFlag = false; + + if (mFlags & FD_ENDIAN_SWAP) + swap(head, dataChunk, ignoreEndianFlag); + + + + if (!mFileDNA->flagEqual(dataChunk.dna_nr)) + { + // Ouch! need to rebuild the struct + short *oldStruct,*curStruct; + char *oldType, *newType; + int oldLen, curLen, reverseOld; + + + oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); + oldType = mFileDNA->getType(oldStruct[0]); + + oldLen = mFileDNA->getLength(oldStruct[0]); + + if ((mFlags&FD_BROKEN_DNA)!=0) + { + if ((strcmp(oldType,"btQuantizedBvhNodeData")==0)&&oldLen==20) + { + return 0; + } + if ((strcmp(oldType,"btShortIntIndexData")==0)) + { + int allocLen = 2; + char *dataAlloc = new char[(dataChunk.nr*allocLen)+1]; + memset(dataAlloc, 0, (dataChunk.nr*allocLen)+1); + short* dest = (short*) dataAlloc; + const short* src = (short*) head; + for (int i=0;igetReverseType(oldType); + + if ((reverseOld!=-1)) + { + // make sure it's here + //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); + + // + curStruct = mMemoryDNA->getStruct(reverseOld); + newType = mMemoryDNA->getType(curStruct[0]); + curLen = mMemoryDNA->getLength(curStruct[0]); + + + + // make sure it's the same + assert((strcmp(oldType, newType)==0) && "internal error, struct mismatch!"); + + + numallocs++; + // numBlocks * length + + int allocLen = (curLen); + char *dataAlloc = new char[(dataChunk.nr*allocLen)+1]; + memset(dataAlloc, 0, (dataChunk.nr*allocLen)); + + // track allocated + addDataBlock(dataAlloc); + + char *cur = dataAlloc; + char *old = head; + for (int block=0; blockgetStruct(dataChunk.dna_nr); + oldType = mFileDNA->getType(oldStruct[0]); + printf("%s equal structure, just memcpy\n",oldType); +#endif // + } + + + char *dataAlloc = new char[(dataChunk.len)+1]; + memset(dataAlloc, 0, dataChunk.len+1); + + + // track allocated + addDataBlock(dataAlloc); + + memcpy(dataAlloc, head, dataChunk.len); + return dataAlloc; + +} + + +// ----------------------------------------------------- // +void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers) +{ + if (old_dna == -1) return; + if (new_dna == -1) return; + + //disable this, because we need to fixup pointers/ListBase + if (0)//mFileDNA->flagEqual(old_dna)) + { + short *strc = mFileDNA->getStruct(old_dna); + int len = mFileDNA->getLength(strc[0]); + + memcpy(strcPtr, dtPtr, len); + return; + } + + // Ok, now build the struct + char *memType, *memName, *cpc, *cpo; + short *fileStruct, *filePtrOld, *memoryStruct, *firstStruct; + int elementLength, size, revType, old_nr, new_nr, fpLen; + short firstStructType; + + + // File to memory lookup + memoryStruct = mMemoryDNA->getStruct(new_dna); + fileStruct = mFileDNA->getStruct(old_dna); + firstStruct = fileStruct; + + + filePtrOld = fileStruct; + firstStructType = mMemoryDNA->getStruct(0)[0]; + + // Get number of elements + elementLength = memoryStruct[1]; + memoryStruct+=2; + + cpc = strcPtr; cpo = 0; + for (int ele=0; elegetType(memoryStruct[0]); + memName = mMemoryDNA->getName(memoryStruct[1]); + + + size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]); + revType = mMemoryDNA->getReverseType(memoryStruct[0]); + + if (revType != -1 && memoryStruct[0]>=firstStructType && memName[0] != '*') + { + cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld); + if (cpo) + { + int arrayLen = mFileDNA->getArraySizeNew(filePtrOld[1]); + old_nr = mFileDNA->getReverseType(memType); + new_nr = revType; + fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]); + if (arrayLen==1) + { + parseStruct(cpc, cpo, old_nr, new_nr,fixupPointers); + } else + { + char* tmpCpc = cpc; + char* tmpCpo = cpo; + + for (int i=0;i3 && type <8) + { + char c; + char *cp = data; + for (int i=0; igetPointerSize(); + int ptrMem = mMemoryDNA->getPointerSize(); + + if (!src && !dst) + return; + + + if (ptrFile == ptrMem) + { + memcpy(dst, src, ptrMem); + } + else if (ptrMem==4 && ptrFile==8) + { + btPointerUid* oldPtr = (btPointerUid*)src; + btPointerUid* newPtr = (btPointerUid*)dst; + + if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) + { + //Bullet stores the 32bit unique ID in both upper and lower part of 64bit pointers + //so it can be used to distinguish between .blend and .bullet + newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; + } else + { + //deal with pointers the Blender .blend style way, see + //readfile.c in the Blender source tree + long64 longValue = *((long64*)src); + //endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros + if (mFlags & FD_ENDIAN_SWAP) + SWITCH_LONGINT(longValue); + *((int*)dst) = (int)(longValue>>3); + } + + } + else if (ptrMem==8 && ptrFile==4) + { + btPointerUid* oldPtr = (btPointerUid*)src; + btPointerUid* newPtr = (btPointerUid*)dst; + if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) + { + newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; + newPtr->m_uniqueIds[1] = 0; + } else + { + *((long64*)dst)= *((int*)src); + } + } + else + { + printf ("%d %d\n", ptrFile,ptrMem); + assert(0 && "Invalid pointer len"); + } + + +} + + +// ----------------------------------------------------- // +void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers) +{ + // find the matching memory dna data + // to the file being loaded. Fill the + // memory with the file data... + + int len = dna_addr[1]; + dna_addr+=2; + + for (int i=0; igetType(dna_addr[0]); + const char* name = mFileDNA->getName(dna_addr[1]); + + + + int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]); + + if ((mFlags&FD_BROKEN_DNA)!=0) + { + if ((strcmp(type,"short")==0)&&(strcmp(name,"int")==0)) + { + eleLen = 0; + } + } + + if (strcmp(lookupName, name)==0) + { + //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str()); + int arrayLen = mFileDNA->getArraySizeNew(dna_addr[1]); + //assert(arrayLenold == arrayLen); + + if (name[0] == '*') + { + // cast pointers + int ptrFile = mFileDNA->getPointerSize(); + int ptrMem = mMemoryDNA->getPointerSize(); + safeSwapPtr(strcData,data); + + if (fixupPointers) + { + if (arrayLen > 1) + { + //void **sarray = (void**)strcData; + //void **darray = (void**)data; + + char *cpc, *cpo; + cpc = (char*)strcData; + cpo = (char*)data; + + for (int a=0; agetStruct(old_nr); + int elementLength = old[1]; + old+=2; + + for (int i=0; igetType(old[0]); + char* name = mFileDNA->getName(old[1]); + int len = mFileDNA->getElementSize(old[0], old[1]); + + if (strcmp(lookupName, name)==0) + { + if (strcmp(type, lookupType)==0) + { + if (foundPos) + *foundPos = old; + return data; + } + return 0; + } + data+=len; + } + return 0; +} + + +// ----------------------------------------------------- // +void bFile::swapStruct(int dna_nr, char *data,bool ignoreEndianFlag) +{ + if (dna_nr == -1) return; + + short *strc = mFileDNA->getStruct(dna_nr); + //short *firstStrc = strc; + + int elementLen= strc[1]; + strc+=2; + + short first = mFileDNA->getStruct(0)[0]; + + char *buf = data; + for (int i=0; igetType(strc[0]); + char *name = mFileDNA->getName(strc[1]); + + int size = mFileDNA->getElementSize(strc[0], strc[1]); + if (strc[0] >= first && name[0]!='*') + { + int old_nr = mFileDNA->getReverseType(type); + int arrayLen = mFileDNA->getArraySizeNew(strc[1]); + if (arrayLen==1) + { + swapStruct(old_nr,buf,ignoreEndianFlag); + } else + { + char* tmpBuf = buf; + for (int i=0;igetArraySize(name); + int arrayLen = mFileDNA->getArraySizeNew(strc[1]); + //assert(arrayLenOld == arrayLen); + swapData(buf, strc[0], arrayLen,ignoreEndianFlag); + } + buf+=size; + } +} + +void bFile::resolvePointersMismatch() +{ +// printf("resolvePointersStructMismatch\n"); + + int i; + + for (i=0;i< m_pointerFixupArray.size();i++) + { + char* cur = m_pointerFixupArray.at(i); + void** ptrptr = (void**) cur; + void* ptr = *ptrptr; + ptr = findLibPointer(ptr); + if (ptr) + { + //printf("Fixup pointer!\n"); + *(ptrptr) = ptr; + } else + { +// printf("pointer not found: %x\n",cur); + } + } + + + for (i=0; igetPointerSize(); + int ptrFile = mFileDNA->getPointerSize(); + + + int blockLen = block->len / ptrFile; + + void *onptr = findLibPointer(*ptrptr); + if (onptr) + { + char *newPtr = new char[blockLen * ptrMem]; + addDataBlock(newPtr); + memset(newPtr, 0, blockLen * ptrMem); + + void **onarray = (void**)onptr; + char *oldPtr = (char*)onarray; + + int p = 0; + while (blockLen-- > 0) + { + btPointerUid dp = {0}; + safeSwapPtr((char*)dp.m_uniqueIds, oldPtr); + + void **tptr = (void**)(newPtr + p * ptrMem); + *tptr = findLibPointer(dp.m_ptr); + + oldPtr += ptrFile; + ++p; + } + + *ptrptr = newPtr; + } + } + } +} + + +///this loop only works fine if the Blender DNA structure of the file matches the headerfiles +void bFile::resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode) +{ + bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + + short int* oldStruct = fileDna->getStruct(dataChunk.dna_nr); + short oldLen = fileDna->getLength(oldStruct[0]); + //char* structType = fileDna->getType(oldStruct[0]); + + char* cur = (char*)findLibPointer(dataChunk.oldPtr); + for (int block=0; blockgetStruct(0)[0]; + + + char* elemPtr= strcPtr; + + short int* oldStruct = fileDna->getStruct(dna_nr); + + int elementLength = oldStruct[1]; + oldStruct+=2; + + int totalSize = 0; + + for (int ele=0; elegetType(oldStruct[0]); + memName = fileDna->getName(oldStruct[1]); + + + + int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); + if (memName[0] == '*') + { + if (arrayLen > 1) + { + void **array= (void**)elemPtr; + for (int a=0; a ",&memName[1]); + printf("%d ", array[a]); + printf("\n",&memName[1]); + } + + array[a] = findLibPointer(array[a]); + } + } + else + { + void** ptrptr = (void**) elemPtr; + void* ptr = *ptrptr; + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + for (int i=0;i ",&memName[1]); + printf("%d ", ptr); + printf("\n",&memName[1]); + } + ptr = findLibPointer(ptr); + + if (ptr) + { + // printf("Fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); + *(ptrptr) = ptr; + if (memName[1] == '*' && ptrptr && *ptrptr) + { + // This will only work if the given **array is continuous + void **array= (void**)*(ptrptr); + void *np= array[0]; + int n=0; + while (np) + { + np= findLibPointer(array[n]); + if (np) array[n]= np; + n++; + } + } + } else + { + // printf("Cannot fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); + } + } + } else + { + int revType = fileDna->getReverseType(oldStruct[0]); + if (oldStruct[0]>=firstStructType) //revType != -1 && + { + char cleanName[MAX_STRLEN]; + getCleanName(memName,cleanName); + + int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); + int byteOffset = 0; + + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + for (int i=0;i1) + { + printf("<%s type=\"%s\" count=%d>\n",cleanName,memType, arrayLen); + } else + { + printf("<%s type=\"%s\">\n",cleanName,memType); + } + } + + for (int i=0;i\n",cleanName); + } + } else + { + //export a simple type + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + + if (arrayLen>MAX_ARRAY_LENGTH) + { + printf("too long\n"); + } else + { + //printf("%s %s\n",memType,memName); + + bool isIntegerType = (strcmp(memType,"char")==0) || (strcmp(memType,"int")==0) || (strcmp(memType,"short")==0); + + if (isIntegerType) + { + const char* newtype="int"; + int dbarray[MAX_ARRAY_LENGTH]; + int* dbPtr = 0; + char* tmp = elemPtr; + dbPtr = &dbarray[0]; + if (dbPtr) + { + char cleanName[MAX_STRLEN]; + getCleanName(memName,cleanName); + + int i; + getElement(arrayLen, newtype,memType, tmp, (char*)dbPtr); + for (i=0;i",cleanName,memType); + else + printf("<%s type=\"%s\" count=%d>",cleanName,memType,arrayLen); + for (i=0;i\n",cleanName); + } + } else + { + const char* newtype="double"; + double dbarray[MAX_ARRAY_LENGTH]; + double* dbPtr = 0; + char* tmp = elemPtr; + dbPtr = &dbarray[0]; + if (dbPtr) + { + int i; + getElement(arrayLen, newtype,memType, tmp, (char*)dbPtr); + for (i=0;i",memName,memType); + } + else + { + printf("<%s type=\"%s\" count=%d>",cleanName,memType,arrayLen); + } + for (i=0;i\n",cleanName); + } + } + } + + } + } + } + + int size = fileDna->getElementSize(oldStruct[0], oldStruct[1]); + totalSize += size; + elemPtr+=size; + + } + + return totalSize; +} + + +///Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures +void bFile::resolvePointers(int verboseMode) +{ + bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + + //char *dataPtr = mFileBuffer+mDataStart; + + if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES)) + { + resolvePointersMismatch(); + } + + { + + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + printf("\n"); + int numitems = m_chunks.size(); + printf("\n", btGetVersion(), numitems); + } + for (int i=0;iflagEqual(dataChunk.dna_nr)) + { + //dataChunk.len + short int* oldStruct = fileDna->getStruct(dataChunk.dna_nr); + char* oldType = fileDna->getType(oldStruct[0]); + + if (verboseMode & FD_VERBOSE_EXPORT_XML) + printf(" <%s pointer=%d>\n",oldType,dataChunk.oldPtr); + + resolvePointersChunk(dataChunk, verboseMode); + + if (verboseMode & FD_VERBOSE_EXPORT_XML) + printf(" \n",oldType); + } else + { + //printf("skipping mStruct\n"); + } + } + if (verboseMode & FD_VERBOSE_EXPORT_XML) + { + printf("\n"); + } + } + + +} + + +// ----------------------------------------------------- // +void* bFile::findLibPointer(void *ptr) +{ + + bStructHandle** ptrptr = getLibPointers().find(ptr); + if (ptrptr) + return *ptrptr; + return 0; +} + + +void bFile::updateOldPointers() +{ + int i; + + for (i=0;igetStruct(dataChunk.dna_nr); + char* typeName = dna->getType(newStruct[0]); + printf("%3d: %s ",i,typeName); + + printf("code=%s ",codestr); + + printf("ptr=%p ",dataChunk.oldPtr); + printf("len=%d ",dataChunk.len); + printf("nr=%d ",dataChunk.nr); + if (dataChunk.nr!=1) + { + printf("not 1\n"); + } + printf("\n"); + + + + + } + +#if 0 + IDFinderData ifd; + ifd.success = 0; + ifd.IDname = NULL; + ifd.just_print_it = 1; + for (i=0; im_blocks.size(); ++i) + { + BlendBlock* bb = bf->m_blocks[i]; + printf("tag='%s'\tptr=%p\ttype=%s\t[%4d]", bb->tag, bb,bf->types[bb->type_index].name,bb->m_array_entries_.size()); + block_ID_finder(bb, bf, &ifd); + printf("\n"); + } +#endif + +} + + +void bFile::writeChunks(FILE* fp, bool fixupPointers) +{ + bParse::bDNA* fileDna = mFileDNA ? mFileDNA : mMemoryDNA; + + for (int i=0;igetStruct(dataChunk.dna_nr); + oldType = fileDna->getType(oldStruct[0]); + oldLen = fileDna->getLength(oldStruct[0]); + ///don't try to convert Link block data, just memcpy it. Other data can be converted. + reverseOld = mMemoryDNA->getReverseType(oldType); + + + if ((reverseOld!=-1)) + { + // make sure it's here + //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); + // + curStruct = mMemoryDNA->getStruct(reverseOld); + newType = mMemoryDNA->getType(curStruct[0]); + // make sure it's the same + assert((strcmp(oldType, newType)==0) && "internal error, struct mismatch!"); + + + curLen = mMemoryDNA->getLength(curStruct[0]); + dataChunk.dna_nr = reverseOld; + if (strcmp("Link",oldType)!=0) + { + dataChunk.len = curLen * dataChunk.nr; + } else + { +// printf("keep length of link = %d\n",dataChunk.len); + } + + //write the structure header + fwrite(&dataChunk,sizeof(bChunkInd),1,fp); + + + + short int* curStruct1; + curStruct1 = mMemoryDNA->getStruct(dataChunk.dna_nr); + assert(curStruct1 == curStruct); + + char* cur = fixupPointers ? (char*)findLibPointer(dataChunk.oldPtr) : (char*)dataChunk.oldPtr; + + //write the actual contents of the structure(s) + fwrite(cur,dataChunk.len,1,fp); + } else + { + printf("serious error, struct mismatch: don't write\n"); + } + } + +} + + +// ----------------------------------------------------- // +int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags) +{ + bool swap = false; + bool varies = false; + + if (flags &FD_ENDIAN_SWAP) + swap = true; + if (flags &FD_BITS_VARIES) + varies = true; + + if (VOID_IS_8) + { + if (varies) + { + bChunkPtr4 head; + memcpy(&head, dataPtr, sizeof(bChunkPtr4)); + + + bChunkPtr8 chunk; + + chunk.code = head.code; + chunk.len = head.len; + chunk.m_uniqueInts[0] = head.m_uniqueInt; + chunk.m_uniqueInts[1] = 0; + chunk.dna_nr = head.dna_nr; + chunk.nr = head.nr; + + if (swap) + { + if ((chunk.code & 0xFFFF)==0) + chunk.code >>=16; + + SWITCH_INT(chunk.len); + SWITCH_INT(chunk.dna_nr); + SWITCH_INT(chunk.nr); + } + + + memcpy(dataChunk, &chunk, sizeof(bChunkInd)); + } + else + { + bChunkPtr8 c; + memcpy(&c, dataPtr, sizeof(bChunkPtr8)); + + if (swap) + { + if ((c.code & 0xFFFF)==0) + c.code >>=16; + + SWITCH_INT(c.len); + SWITCH_INT(c.dna_nr); + SWITCH_INT(c.nr); + } + + memcpy(dataChunk, &c, sizeof(bChunkInd)); + } + } + else + { + if (varies) + { + bChunkPtr8 head; + memcpy(&head, dataPtr, sizeof(bChunkPtr8)); + + + bChunkPtr4 chunk; + chunk.code = head.code; + chunk.len = head.len; + + if (head.m_uniqueInts[0]==head.m_uniqueInts[1]) + { + chunk.m_uniqueInt = head.m_uniqueInts[0]; + } else + { + long64 oldPtr =0; + memcpy(&oldPtr, &head.m_uniqueInts[0], 8); + if (swap) + SWITCH_LONGINT(oldPtr); + chunk.m_uniqueInt = (int)(oldPtr >> 3); + } + + + chunk.dna_nr = head.dna_nr; + chunk.nr = head.nr; + + if (swap) + { + if ((chunk.code & 0xFFFF)==0) + chunk.code >>=16; + + SWITCH_INT(chunk.len); + SWITCH_INT(chunk.dna_nr); + SWITCH_INT(chunk.nr); + } + + memcpy(dataChunk, &chunk, sizeof(bChunkInd)); + } + else + { + bChunkPtr4 c; + memcpy(&c, dataPtr, sizeof(bChunkPtr4)); + + if (swap) + { + if ((c.code & 0xFFFF)==0) + c.code >>=16; + + SWITCH_INT(c.len); + SWITCH_INT(c.dna_nr); + SWITCH_INT(c.nr); + } + memcpy(dataChunk, &c, sizeof(bChunkInd)); + } + } + + if (dataChunk->len < 0) + return -1; + +#if 0 + print ("----------"); + print (dataChunk->code); + print (dataChunk->len); + print (dataChunk->old); + print (dataChunk->dna_nr); + print (dataChunk->nr); +#endif + return (dataChunk->len+ChunkUtils::getOffset(flags)); +} + + + +//eof diff --git a/Code/Physics/Bullet Source/BulletFileLoader/bFile.h b/Code/Physics/Bullet Source/BulletFileLoader/bFile.h new file mode 100644 index 00000000..9df95adf --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/bFile.h @@ -0,0 +1,165 @@ +/* +bParse +Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef __BFILE_H__ +#define __BFILE_H__ + +#include "bCommon.h" +#include "bChunk.h" +#include + +namespace bParse { + + // ----------------------------------------------------- // + enum bFileFlags + { + FD_INVALID =0, + FD_OK =1, + FD_VOID_IS_8 =2, + FD_ENDIAN_SWAP =4, + FD_FILE_64 =8, + FD_BITS_VARIES =16, + FD_VERSION_VARIES = 32, + FD_DOUBLE_PRECISION =64, + FD_BROKEN_DNA = 128 + }; + + enum bFileVerboseMode + { + FD_VERBOSE_EXPORT_XML = 1, + FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2, + FD_VERBOSE_DUMP_CHUNKS = 4, + FD_VERBOSE_DUMP_FILE_INFO=8, + }; + // ----------------------------------------------------- // + class bFile + { + protected: + + char m_headerString[7]; + + bool mOwnsBuffer; + char* mFileBuffer; + int mFileLen; + int mVersion; + + + bPtrMap mLibPointers; + + int mDataStart; + bDNA* mFileDNA; + bDNA* mMemoryDNA; + + btAlignedObjectArray m_pointerFixupArray; + btAlignedObjectArray m_pointerPtrFixupArray; + + btAlignedObjectArray m_chunks; + btHashMap m_chunkPtrPtrMap; + + // + + bPtrMap mDataPointers; + + + int mFlags; + + // //////////////////////////////////////////////////////////////////////////// + + // buffer offset util + int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); + void safeSwapPtr(char *dst, const char *src); + + virtual void parseHeader(); + + virtual void parseData() = 0; + + void resolvePointersMismatch(); + void resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode); + + int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion); + //void swapPtr(char *dst, char *src); + + void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers); + void getMatchingFileDNA(short* old, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers); + char* getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos); + + + void swap(char *head, class bChunkInd& ch, bool ignoreEndianFlag); + void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag); + void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag); + void swapLen(char *dataPtr); + void swapDNA(char* ptr); + + + char* readStruct(char *head, class bChunkInd& chunk); + char *getAsString(int code); + + void parseInternal(int verboseMode, char* memDna,int memDnaLength); + + public: + bFile(const char *filename, const char headerString[7]); + + //todo: make memoryBuffer const char + //bFile( const char *memoryBuffer, int len); + bFile( char *memoryBuffer, int len, const char headerString[7]); + virtual ~bFile(); + + bDNA* getFileDNA() + { + return mFileDNA; + } + + virtual void addDataBlock(char* dataBlock) = 0; + + int getFlags() const + { + return mFlags; + } + + bPtrMap& getLibPointers() + { + return mLibPointers; + } + + void* findLibPointer(void *ptr); + + bool ok(); + + virtual void parse(int verboseMode) = 0; + + virtual int write(const char* fileName, bool fixupPointers=false) = 0; + + virtual void writeChunks(FILE* fp, bool fixupPointers ); + + virtual void writeDNA(FILE* fp) = 0; + + void updateOldPointers(); + void resolvePointers(int verboseMode); + + void dumpChunks(bDNA* dna); + + int getVersion() const + { + return mVersion; + } + //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped + void preSwap(); + void writeFile(const char* fileName); + + }; +} + + +#endif//__BFILE_H__ diff --git a/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.cpp b/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.cpp new file mode 100644 index 00000000..3ecf8851 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.cpp @@ -0,0 +1,423 @@ +/* +bParse +Copyright (c) 2006-2010 Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#include "btBulletFile.h" +#include "bDefines.h" +#include "bDNA.h" + +#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) +#include +#endif +#include + + +// 32 && 64 bit versions +#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#ifdef _WIN64 +extern char sBulletDNAstr64[]; +extern int sBulletDNAlen64; +#else +extern char sBulletDNAstr[]; +extern int sBulletDNAlen; +#endif //_WIN64 +#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + +extern char sBulletDNAstr64[]; +extern int sBulletDNAlen64; +extern char sBulletDNAstr[]; +extern int sBulletDNAlen; + +#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + +using namespace bParse; + +btBulletFile::btBulletFile() +:bFile("", "BULLET ") +{ + mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it" + + m_DnaCopy = 0; + + +#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +#ifdef _WIN64 + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16); + memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64); + mMemoryDNA->init(m_DnaCopy,sBulletDNAlen64); +#else//_WIN64 + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16); + memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen); + mMemoryDNA->init(m_DnaCopy,sBulletDNAlen); +#endif//_WIN64 +#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) + { + m_DnaCopy = (char*) btAlignedAlloc(sBulletDNAlen64,16); + memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64); + mMemoryDNA->init(m_DnaCopy,sBulletDNAlen64); + } + else + { + m_DnaCopy =(char*) btAlignedAlloc(sBulletDNAlen,16); + memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen); + mMemoryDNA->init(m_DnaCopy,sBulletDNAlen); + } +#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +} + + + +btBulletFile::btBulletFile(const char* fileName) +:bFile(fileName, "BULLET ") +{ + m_DnaCopy = 0; +} + + + +btBulletFile::btBulletFile(char *memoryBuffer, int len) +:bFile(memoryBuffer,len, "BULLET ") +{ + m_DnaCopy = 0; +} + + +btBulletFile::~btBulletFile() +{ + if (m_DnaCopy) + btAlignedFree(m_DnaCopy); + + + while (m_dataBlocks.size()) + { + char* dataBlock = m_dataBlocks[m_dataBlocks.size()-1]; + delete[] dataBlock; + m_dataBlocks.pop_back(); + } + +} + + + +// ----------------------------------------------------- // +void btBulletFile::parseData() +{ +// printf ("Building datablocks"); +// printf ("Chunk size = %d",CHUNK_HEADER_LEN); +// printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); + + const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; + + //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; + + + mDataStart = 12; + + char *dataPtr = mFileBuffer+mDataStart; + + bChunkInd dataChunk; + dataChunk.code = 0; + + + //dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags); + int seek = getNextBlock(&dataChunk, dataPtr, mFlags); + + + if (mFlags &FD_ENDIAN_SWAP) + swapLen(dataPtr); + + //dataPtr += ChunkUtils::getOffset(mFlags); + char *dataPtrHead = 0; + + while (dataChunk.code != DNA1) + { + if (!brokenDNA || (dataChunk.code != BT_QUANTIZED_BVH_CODE) ) + { + + // one behind + if (dataChunk.code == SDNA) break; + //if (dataChunk.code == DNA1) break; + + // same as (BHEAD+DATA dependency) + dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); + if (dataChunk.dna_nr>=0) + { + char *id = readStruct(dataPtrHead, dataChunk); + + // lookup maps + if (id) + { + m_chunkPtrPtrMap.insert(dataChunk.oldPtr, dataChunk); + mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); + + m_chunks.push_back(dataChunk); + // block it + //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); + //if (listID) + // listID->push_back((bStructHandle*)id); + } + + if (dataChunk.code == BT_SOFTBODY_CODE) + { + m_softBodies.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_RIGIDBODY_CODE) + { + m_rigidBodies.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_DYNAMICSWORLD_CODE) + { + m_dynamicsWorldInfo.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_CONSTRAINT_CODE) + { + m_constraints.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_QUANTIZED_BVH_CODE) + { + m_bvhs.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_TRIANLGE_INFO_MAP) + { + m_triangleInfoMaps.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_COLLISIONOBJECT_CODE) + { + m_collisionObjects.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_SHAPE_CODE) + { + m_collisionShapes.push_back((bStructHandle*) id); + } + + // if (dataChunk.code == GLOB) + // { + // m_glob = (bStructHandle*) id; + // } + } else + { + printf("unknown chunk\n"); + + mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); + } + } else + { + printf("skipping BT_QUANTIZED_BVH_CODE due to broken DNA\n"); + } + + + dataPtr += seek; + + seek = getNextBlock(&dataChunk, dataPtr, mFlags); + if (mFlags &FD_ENDIAN_SWAP) + swapLen(dataPtr); + + if (seek < 0) + break; + } + +} + +void btBulletFile::addDataBlock(char* dataBlock) +{ + m_dataBlocks.push_back(dataBlock); + +} + + + + +void btBulletFile::writeDNA(FILE* fp) +{ + + bChunkInd dataChunk; + dataChunk.code = DNA1; + dataChunk.dna_nr = 0; + dataChunk.nr = 1; +#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) + { +#ifdef _WIN64 + dataChunk.len = sBulletDNAlen64; + dataChunk.oldPtr = sBulletDNAstr64; + fwrite(&dataChunk,sizeof(bChunkInd),1,fp); + fwrite(sBulletDNAstr64, sBulletDNAlen64,1,fp); +#else + btAssert(0); +#endif + } + else + { +#ifndef _WIN64 + dataChunk.len = sBulletDNAlen; + dataChunk.oldPtr = sBulletDNAstr; + fwrite(&dataChunk,sizeof(bChunkInd),1,fp); + fwrite(sBulletDNAstr, sBulletDNAlen,1,fp); +#else//_WIN64 + btAssert(0); +#endif//_WIN64 + } +#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) + { + dataChunk.len = sBulletDNAlen64; + dataChunk.oldPtr = sBulletDNAstr64; + fwrite(&dataChunk,sizeof(bChunkInd),1,fp); + fwrite(sBulletDNAstr64, sBulletDNAlen64,1,fp); + } + else + { + dataChunk.len = sBulletDNAlen; + dataChunk.oldPtr = sBulletDNAstr; + fwrite(&dataChunk,sizeof(bChunkInd),1,fp); + fwrite(sBulletDNAstr, sBulletDNAlen,1,fp); + } +#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES +} + + +void btBulletFile::parse(int verboseMode) +{ +#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) + { +#ifdef _WIN64 + + if (m_DnaCopy) + delete m_DnaCopy; + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16); + memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64); + parseInternal(verboseMode,(char*)sBulletDNAstr64,sBulletDNAlen64); +#else + btAssert(0); +#endif + } + else + { +#ifndef _WIN64 + + if (m_DnaCopy) + delete m_DnaCopy; + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16); + memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen); + parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen); +#else + btAssert(0); +#endif + } +#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + if (VOID_IS_8) + { + if (m_DnaCopy) + delete m_DnaCopy; + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16); + memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64); + parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen64); + } + else + { + if (m_DnaCopy) + delete m_DnaCopy; + m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16); + memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen); + parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen); + } +#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES + + //the parsing will convert to cpu endian + mFlags &=~FD_ENDIAN_SWAP; + + int littleEndian= 1; + littleEndian= ((char*)&littleEndian)[0]; + + mFileBuffer[8] = littleEndian?'v':'V'; + +} + +// experimental +int btBulletFile::write(const char* fileName, bool fixupPointers) +{ + FILE *fp = fopen(fileName, "wb"); + if (fp) + { + char header[SIZEOFBLENDERHEADER] ; + memcpy(header, m_headerString, 7); + int endian= 1; + endian= ((char*)&endian)[0]; + + if (endian) + { + header[7] = '_'; + } else + { + header[7] = '-'; + } + if (VOID_IS_8) + { + header[8]='V'; + } else + { + header[8]='v'; + } + + header[9] = '2'; + header[10] = '7'; + header[11] = '5'; + + fwrite(header,SIZEOFBLENDERHEADER,1,fp); + + writeChunks(fp, fixupPointers); + + writeDNA(fp); + + fclose(fp); + + } else + { + printf("Error: cannot open file %s for writing\n",fileName); + return 0; + } + return 1; +} + + + +void btBulletFile::addStruct(const char* structType,void* data, int len, void* oldPtr, int code) +{ + + bParse::bChunkInd dataChunk; + dataChunk.code = code; + dataChunk.nr = 1; + dataChunk.len = len; + dataChunk.dna_nr = mMemoryDNA->getReverseType(structType); + dataChunk.oldPtr = oldPtr; + + ///Perform structure size validation + short* structInfo= mMemoryDNA->getStruct(dataChunk.dna_nr); + int elemBytes; + elemBytes= mMemoryDNA->getLength(structInfo[0]); +// int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]); + assert(len==elemBytes); + + mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data); + m_chunks.push_back(dataChunk); +} \ No newline at end of file diff --git a/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.h b/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.h new file mode 100644 index 00000000..c4d73562 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/btBulletFile.h @@ -0,0 +1,83 @@ +/* +bParse +Copyright (c) 2006-2010 Charlie C & Erwin Coumans http://gamekit.googlecode.com + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef BT_BULLET_FILE_H +#define BT_BULLET_FILE_H + + +#include "bFile.h" +#include "LinearMath/btAlignedObjectArray.h" +#include "bDefines.h" + +#include "LinearMath/btSerializer.h" + + + +namespace bParse { + + // ----------------------------------------------------- // + class btBulletFile : public bFile + { + + + protected: + + char* m_DnaCopy; + + public: + + btAlignedObjectArray m_softBodies; + + btAlignedObjectArray m_rigidBodies; + + btAlignedObjectArray m_collisionObjects; + + btAlignedObjectArray m_collisionShapes; + + btAlignedObjectArray m_constraints; + + btAlignedObjectArray m_bvhs; + + btAlignedObjectArray m_triangleInfoMaps; + + btAlignedObjectArray m_dynamicsWorldInfo; + + btAlignedObjectArray m_dataBlocks; + btBulletFile(); + + btBulletFile(const char* fileName); + + btBulletFile(char *memoryBuffer, int len); + + virtual ~btBulletFile(); + + virtual void addDataBlock(char* dataBlock); + + + // experimental + virtual int write(const char* fileName, bool fixupPointers=false); + + virtual void parse(int verboseMode); + + virtual void parseData(); + + virtual void writeDNA(FILE* fp); + + void addStruct(const char* structType,void* data, int len, void* oldPtr, int code); + + }; +}; + +#endif //BT_BULLET_FILE_H diff --git a/Code/Physics/Bullet Source/BulletFileLoader/premake4.lua b/Code/Physics/Bullet Source/BulletFileLoader/premake4.lua new file mode 100644 index 00000000..f4aad3da --- /dev/null +++ b/Code/Physics/Bullet Source/BulletFileLoader/premake4.lua @@ -0,0 +1,12 @@ + project "BulletFileLoader" + + kind "StaticLib" + targetdir "../../lib" + includedirs { + "../../../src" + } + + files { + "**.cpp", + "**.h" + } \ No newline at end of file diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/CMakeLists.txt b/Code/Physics/Bullet Source/BulletWorldImporter/CMakeLists.txt new file mode 100644 index 00000000..666ac21c --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/CMakeLists.txt @@ -0,0 +1,40 @@ +INCLUDE_DIRECTORIES( + ${BULLET_PHYSICS_SOURCE_DIR}/src + ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader +) + +ADD_LIBRARY( +BulletWorldImporter +btBulletWorldImporter.cpp +btBulletWorldImporter.h +btWorldImporter.cpp +btWorldImporter.h +) + +SET_TARGET_PROPERTIES(BulletWorldImporter PROPERTIES VERSION ${BULLET_VERSION}) +SET_TARGET_PROPERTIES(BulletWorldImporter PROPERTIES SOVERSION ${BULLET_VERSION}) + +IF (BUILD_SHARED_LIBS) + TARGET_LINK_LIBRARIES(BulletWorldImporter BulletDynamics BulletCollision BulletFileLoader LinearMath) +ENDIF (BUILD_SHARED_LIBS) + +IF (INSTALL_EXTRA_LIBS) + IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) + #FILES_MATCHING requires CMake 2.6 + IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletWorldImporter DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletWorldImporter DESTINATION lib${LIB_SUFFIX}) + INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.h" PATTERN +".svn" EXCLUDE PATTERN "CMakeFiles" EXCLUDE) + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + SET_TARGET_PROPERTIES(BulletWorldImporter PROPERTIES FRAMEWORK true) + SET_TARGET_PROPERTIES(BulletWorldImporter PROPERTIES PUBLIC_HEADER "btBulletWorldImporter.h") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) +ENDIF (INSTALL_EXTRA_LIBS) diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.cpp b/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.cpp new file mode 100644 index 00000000..3f3a3593 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.cpp @@ -0,0 +1,362 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + + +#include "btBulletWorldImporter.h" +#include "../BulletFileLoader/btBulletFile.h" + +#include "btBulletDynamicsCommon.h" +#include "BulletCollision/Gimpact/btGImpactShape.h" + + + +//#define USE_INTERNAL_EDGE_UTILITY +#ifdef USE_INTERNAL_EDGE_UTILITY +#include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.h" +#endif //USE_INTERNAL_EDGE_UTILITY + +btBulletWorldImporter::btBulletWorldImporter(btDynamicsWorld* world) + :btWorldImporter(world) +{ +} + +btBulletWorldImporter::~btBulletWorldImporter() +{ +} + + +bool btBulletWorldImporter::loadFile( const char* fileName, const char* preSwapFilenameOut) +{ + bParse::btBulletFile* bulletFile2 = new bParse::btBulletFile(fileName); + + + bool result = loadFileFromMemory(bulletFile2); + //now you could save the file in 'native' format using + //bulletFile2->writeFile("native.bullet"); + if (result) + { + if (preSwapFilenameOut) + { + bulletFile2->preSwap(); + bulletFile2->writeFile(preSwapFilenameOut); + } + + } + delete bulletFile2; + + return result; + +} + + + +bool btBulletWorldImporter::loadFileFromMemory( char* memoryBuffer, int len) +{ + bParse::btBulletFile* bulletFile2 = new bParse::btBulletFile(memoryBuffer,len); + + bool result = loadFileFromMemory(bulletFile2); + + delete bulletFile2; + + return result; +} + + + + +bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFile2) +{ + bool ok = (bulletFile2->getFlags()& bParse::FD_OK)!=0; + + if (ok) + bulletFile2->parse(m_verboseMode); + else + return false; + + if (m_verboseMode & bParse::FD_VERBOSE_DUMP_CHUNKS) + { + bulletFile2->dumpChunks(bulletFile2->getFileDNA()); + } + + return convertAllObjects(bulletFile2); + +} + +bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile2) +{ + + m_shapeMap.clear(); + m_bodyMap.clear(); + + int i; + + for (i=0;im_bvhs.size();i++) + { + btOptimizedBvh* bvh = createOptimizedBvh(); + + if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) + { + btQuantizedBvhDoubleData* bvhData = (btQuantizedBvhDoubleData*)bulletFile2->m_bvhs[i]; + bvh->deSerializeDouble(*bvhData); + } else + { + btQuantizedBvhFloatData* bvhData = (btQuantizedBvhFloatData*)bulletFile2->m_bvhs[i]; + bvh->deSerializeFloat(*bvhData); + } + m_bvhMap.insert(bulletFile2->m_bvhs[i],bvh); + } + + + + + + for (i=0;im_collisionShapes.size();i++) + { + btCollisionShapeData* shapeData = (btCollisionShapeData*)bulletFile2->m_collisionShapes[i]; + btCollisionShape* shape = convertCollisionShape(shapeData); + if (shape) + { + // printf("shapeMap.insert(%x,%x)\n",shapeData,shape); + m_shapeMap.insert(shapeData,shape); + } + + if (shape&& shapeData->m_name) + { + char* newname = duplicateName(shapeData->m_name); + m_objectNameMap.insert(shape,newname); + m_nameShapeMap.insert(newname,shape); + } + } + + + + + + for (int i=0;im_dynamicsWorldInfo.size();i++) + { + if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) + { + btDynamicsWorldDoubleData* solverInfoData = (btDynamicsWorldDoubleData*)bulletFile2->m_dynamicsWorldInfo[i]; + btContactSolverInfo solverInfo; + + btVector3 gravity; + gravity.deSerializeDouble(solverInfoData->m_gravity); + + solverInfo.m_tau = btScalar(solverInfoData->m_solverInfo.m_tau); + solverInfo.m_damping = btScalar(solverInfoData->m_solverInfo.m_damping); + solverInfo.m_friction = btScalar(solverInfoData->m_solverInfo.m_friction); + solverInfo.m_timeStep = btScalar(solverInfoData->m_solverInfo.m_timeStep); + + solverInfo.m_restitution = btScalar(solverInfoData->m_solverInfo.m_restitution); + solverInfo.m_maxErrorReduction = btScalar(solverInfoData->m_solverInfo.m_maxErrorReduction); + solverInfo.m_sor = btScalar(solverInfoData->m_solverInfo.m_sor); + solverInfo.m_erp = btScalar(solverInfoData->m_solverInfo.m_erp); + + solverInfo.m_erp2 = btScalar(solverInfoData->m_solverInfo.m_erp2); + solverInfo.m_globalCfm = btScalar(solverInfoData->m_solverInfo.m_globalCfm); + solverInfo.m_splitImpulsePenetrationThreshold = btScalar(solverInfoData->m_solverInfo.m_splitImpulsePenetrationThreshold); + solverInfo.m_splitImpulseTurnErp = btScalar(solverInfoData->m_solverInfo.m_splitImpulseTurnErp); + + solverInfo.m_linearSlop = btScalar(solverInfoData->m_solverInfo.m_linearSlop); + solverInfo.m_warmstartingFactor = btScalar(solverInfoData->m_solverInfo.m_warmstartingFactor); + solverInfo.m_maxGyroscopicForce = btScalar(solverInfoData->m_solverInfo.m_maxGyroscopicForce); + solverInfo.m_singleAxisRollingFrictionThreshold = btScalar(solverInfoData->m_solverInfo.m_singleAxisRollingFrictionThreshold); + + solverInfo.m_numIterations = solverInfoData->m_solverInfo.m_numIterations; + solverInfo.m_solverMode = solverInfoData->m_solverInfo.m_solverMode; + solverInfo.m_restingContactRestitutionThreshold = solverInfoData->m_solverInfo.m_restingContactRestitutionThreshold; + solverInfo.m_minimumSolverBatchSize = solverInfoData->m_solverInfo.m_minimumSolverBatchSize; + + solverInfo.m_splitImpulse = solverInfoData->m_solverInfo.m_splitImpulse; + + setDynamicsWorldInfo(gravity,solverInfo); + } else + { + btDynamicsWorldFloatData* solverInfoData = (btDynamicsWorldFloatData*)bulletFile2->m_dynamicsWorldInfo[i]; + btContactSolverInfo solverInfo; + + btVector3 gravity; + gravity.deSerializeFloat(solverInfoData->m_gravity); + + solverInfo.m_tau = solverInfoData->m_solverInfo.m_tau; + solverInfo.m_damping = solverInfoData->m_solverInfo.m_damping; + solverInfo.m_friction = solverInfoData->m_solverInfo.m_friction; + solverInfo.m_timeStep = solverInfoData->m_solverInfo.m_timeStep; + + solverInfo.m_restitution = solverInfoData->m_solverInfo.m_restitution; + solverInfo.m_maxErrorReduction = solverInfoData->m_solverInfo.m_maxErrorReduction; + solverInfo.m_sor = solverInfoData->m_solverInfo.m_sor; + solverInfo.m_erp = solverInfoData->m_solverInfo.m_erp; + + solverInfo.m_erp2 = solverInfoData->m_solverInfo.m_erp2; + solverInfo.m_globalCfm = solverInfoData->m_solverInfo.m_globalCfm; + solverInfo.m_splitImpulsePenetrationThreshold = solverInfoData->m_solverInfo.m_splitImpulsePenetrationThreshold; + solverInfo.m_splitImpulseTurnErp = solverInfoData->m_solverInfo.m_splitImpulseTurnErp; + + solverInfo.m_linearSlop = solverInfoData->m_solverInfo.m_linearSlop; + solverInfo.m_warmstartingFactor = solverInfoData->m_solverInfo.m_warmstartingFactor; + solverInfo.m_maxGyroscopicForce = solverInfoData->m_solverInfo.m_maxGyroscopicForce; + solverInfo.m_singleAxisRollingFrictionThreshold = solverInfoData->m_solverInfo.m_singleAxisRollingFrictionThreshold; + + solverInfo.m_numIterations = solverInfoData->m_solverInfo.m_numIterations; + solverInfo.m_solverMode = solverInfoData->m_solverInfo.m_solverMode; + solverInfo.m_restingContactRestitutionThreshold = solverInfoData->m_solverInfo.m_restingContactRestitutionThreshold; + solverInfo.m_minimumSolverBatchSize = solverInfoData->m_solverInfo.m_minimumSolverBatchSize; + + solverInfo.m_splitImpulse = solverInfoData->m_solverInfo.m_splitImpulse; + + setDynamicsWorldInfo(gravity,solverInfo); + } + } + + + for (i=0;im_rigidBodies.size();i++) + { + if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) + { + btRigidBodyDoubleData* colObjData = (btRigidBodyDoubleData*)bulletFile2->m_rigidBodies[i]; + convertRigidBodyDouble(colObjData); + } else + { + btRigidBodyFloatData* colObjData = (btRigidBodyFloatData*)bulletFile2->m_rigidBodies[i]; + convertRigidBodyFloat(colObjData); + } + + + } + + for (i=0;im_collisionObjects.size();i++) + { + if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) + { + btCollisionObjectDoubleData* colObjData = (btCollisionObjectDoubleData*)bulletFile2->m_collisionObjects[i]; + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape); + if (shapePtr && *shapePtr) + { + btTransform startTransform; + colObjData->m_worldTransform.m_origin.m_floats[3] = 0.f; + startTransform.deSerializeDouble(colObjData->m_worldTransform); + + btCollisionShape* shape = (btCollisionShape*)*shapePtr; + btCollisionObject* body = createCollisionObject(startTransform,shape,colObjData->m_name); + body->setFriction(btScalar(colObjData->m_friction)); + body->setRestitution(btScalar(colObjData->m_restitution)); + +#ifdef USE_INTERNAL_EDGE_UTILITY + if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) + { + btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape; + if (trimesh->getTriangleInfoMap()) + { + body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); + } + } +#endif //USE_INTERNAL_EDGE_UTILITY + m_bodyMap.insert(colObjData,body); + } else + { + printf("error: no shape found\n"); + } + + } else + { + btCollisionObjectFloatData* colObjData = (btCollisionObjectFloatData*)bulletFile2->m_collisionObjects[i]; + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape); + if (shapePtr && *shapePtr) + { + btTransform startTransform; + colObjData->m_worldTransform.m_origin.m_floats[3] = 0.f; + startTransform.deSerializeFloat(colObjData->m_worldTransform); + + btCollisionShape* shape = (btCollisionShape*)*shapePtr; + btCollisionObject* body = createCollisionObject(startTransform,shape,colObjData->m_name); + +#ifdef USE_INTERNAL_EDGE_UTILITY + if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) + { + btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape; + if (trimesh->getTriangleInfoMap()) + { + body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); + } + } +#endif //USE_INTERNAL_EDGE_UTILITY + m_bodyMap.insert(colObjData,body); + } else + { + printf("error: no shape found\n"); + } + } + + } + + + for (i=0;im_constraints.size();i++) + { + btTypedConstraintData2* constraintData = (btTypedConstraintData2*)bulletFile2->m_constraints[i]; + btTypedConstraintFloatData* singleC = (btTypedConstraintFloatData*)bulletFile2->m_constraints[i]; + btTypedConstraintDoubleData* doubleC = (btTypedConstraintDoubleData*)bulletFile2->m_constraints[i]; + + btCollisionObject** colAptr = m_bodyMap.find(constraintData->m_rbA); + btCollisionObject** colBptr = m_bodyMap.find(constraintData->m_rbB); + + btRigidBody* rbA = 0; + btRigidBody* rbB = 0; + + if (colAptr) + { + rbA = btRigidBody::upcast(*colAptr); + if (!rbA) + rbA = &getFixedBody(); + } + if (colBptr) + { + rbB = btRigidBody::upcast(*colBptr); + if (!rbB) + rbB = &getFixedBody(); + } + if (!rbA && !rbB) + continue; + + bool isDoublePrecisionData = (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION)!=0; + + if (isDoublePrecisionData) + { + if (bulletFile2->getVersion()>=282) + { + btTypedConstraintDoubleData* dc = (btTypedConstraintDoubleData*)constraintData; + convertConstraintDouble(dc, rbA,rbB, bulletFile2->getVersion()); + } else + { + //double-precision constraints were messed up until 2.82, try to recover data... + + btTypedConstraintData* oldData = (btTypedConstraintData*)constraintData; + + convertConstraintBackwardsCompatible281(oldData, rbA,rbB, bulletFile2->getVersion()); + + } + } + else + { + btTypedConstraintFloatData* dc = (btTypedConstraintFloatData*)constraintData; + convertConstraintFloat(dc, rbA,rbB, bulletFile2->getVersion()); + } + + + } + + return true; +} + diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.h b/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.h new file mode 100644 index 00000000..27c1e7e3 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/btBulletWorldImporter.h @@ -0,0 +1,68 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + + +#ifndef BULLET_WORLD_IMPORTER_H +#define BULLET_WORLD_IMPORTER_H + + +#include "btWorldImporter.h" + + +class btBulletFile; + + + + +namespace bParse +{ + class btBulletFile; + +}; + + + +///The btBulletWorldImporter is a starting point to import .bullet files. +///note that not all data is converted yet. You are expected to override or modify this class. +///See Bullet/Demos/SerializeDemo for a derived class that extract btSoftBody objects too. +class btBulletWorldImporter : public btWorldImporter +{ + + +public: + + btBulletWorldImporter(btDynamicsWorld* world=0); + + virtual ~btBulletWorldImporter(); + + ///if you pass a valid preSwapFilenameOut, it will save a new file with a different endianness + ///this pre-swapped file can be loaded without swapping on a target platform of different endianness + bool loadFile(const char* fileName, const char* preSwapFilenameOut=0); + + ///the memoryBuffer might be modified (for example if endian swaps are necessary) + bool loadFileFromMemory(char *memoryBuffer, int len); + + bool loadFileFromMemory(bParse::btBulletFile* file); + + //call make sure bulletFile2 has been parsed, either using btBulletFile::parse or btBulletWorldImporter::loadFileFromMemory + virtual bool convertAllObjects(bParse::btBulletFile* file); + + + + +}; + +#endif //BULLET_WORLD_IMPORTER_H + diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.cpp b/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.cpp new file mode 100644 index 00000000..982931e0 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.cpp @@ -0,0 +1,1922 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#include "btWorldImporter.h" +#include "btBulletDynamicsCommon.h" +#include "BulletCollision/Gimpact/btGImpactShape.h" + +btWorldImporter::btWorldImporter(btDynamicsWorld* world) +:m_dynamicsWorld(world), +m_verboseMode(0) +{ + +} + +btWorldImporter::~btWorldImporter() +{ +} + +void btWorldImporter::deleteAllData() +{ + int i; + for (i=0;iremoveConstraint(m_allocatedConstraints[i]); + delete m_allocatedConstraints[i]; + } + m_allocatedConstraints.clear(); + + + for (i=0;iremoveRigidBody(btRigidBody::upcast(m_allocatedRigidBodies[i])); + delete m_allocatedRigidBodies[i]; + } + + m_allocatedRigidBodies.clear(); + + + for (i=0;im_numMeshParts;a++) + { + btMeshPartData* curPart = &curData->m_meshPartsPtr[a]; + if(curPart->m_vertices3f) + delete [] curPart->m_vertices3f; + + if(curPart->m_vertices3d) + delete [] curPart->m_vertices3d; + + if(curPart->m_indices32) + delete [] curPart->m_indices32; + + if(curPart->m_3indices16) + delete [] curPart->m_3indices16; + + if(curPart->m_indices16) + delete [] curPart->m_indices16; + + if (curPart->m_3indices8) + delete [] curPart->m_3indices8; + + } + delete [] curData->m_meshPartsPtr; + delete curData; + } + m_allocatedbtStridingMeshInterfaceDatas.clear(); + + for (i=0;im_shapeType) + { + case STATIC_PLANE_PROXYTYPE: + { + btStaticPlaneShapeData* planeData = (btStaticPlaneShapeData*)shapeData; + btVector3 planeNormal,localScaling; + planeNormal.deSerializeFloat(planeData->m_planeNormal); + localScaling.deSerializeFloat(planeData->m_localScaling); + shape = createPlaneShape(planeNormal,planeData->m_planeConstant); + shape->setLocalScaling(localScaling); + + break; + } + case SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE: + { + btScaledTriangleMeshShapeData* scaledMesh = (btScaledTriangleMeshShapeData*) shapeData; + btCollisionShapeData* colShapeData = (btCollisionShapeData*) &scaledMesh->m_trimeshShapeData; + colShapeData->m_shapeType = TRIANGLE_MESH_SHAPE_PROXYTYPE; + btCollisionShape* childShape = convertCollisionShape(colShapeData); + btBvhTriangleMeshShape* meshShape = (btBvhTriangleMeshShape*)childShape; + btVector3 localScaling; + localScaling.deSerializeFloat(scaledMesh->m_localScaling); + + shape = createScaledTrangleMeshShape(meshShape, localScaling); + break; + } + case GIMPACT_SHAPE_PROXYTYPE: + { + btGImpactMeshShapeData* gimpactData = (btGImpactMeshShapeData*) shapeData; + if (gimpactData->m_gimpactSubType == CONST_GIMPACT_TRIMESH_SHAPE) + { + btStridingMeshInterfaceData* interfaceData = createStridingMeshInterfaceData(&gimpactData->m_meshInterface); + btTriangleIndexVertexArray* meshInterface = createMeshInterface(*interfaceData); + + + btGImpactMeshShape* gimpactShape = createGimpactShape(meshInterface); + btVector3 localScaling; + localScaling.deSerializeFloat(gimpactData->m_localScaling); + gimpactShape->setLocalScaling(localScaling); + gimpactShape->setMargin(btScalar(gimpactData->m_collisionMargin)); + gimpactShape->updateBound(); + shape = gimpactShape; + } else + { + printf("unsupported gimpact sub type\n"); + } + break; + } + + case CYLINDER_SHAPE_PROXYTYPE: + case CONE_SHAPE_PROXYTYPE: + case CAPSULE_SHAPE_PROXYTYPE: + case BOX_SHAPE_PROXYTYPE: + case SPHERE_SHAPE_PROXYTYPE: + case MULTI_SPHERE_SHAPE_PROXYTYPE: + case CONVEX_HULL_SHAPE_PROXYTYPE: + { + btConvexInternalShapeData* bsd = (btConvexInternalShapeData*)shapeData; + btVector3 implicitShapeDimensions; + implicitShapeDimensions.deSerializeFloat(bsd->m_implicitShapeDimensions); + btVector3 localScaling; + localScaling.deSerializeFloat(bsd->m_localScaling); + btVector3 margin(bsd->m_collisionMargin,bsd->m_collisionMargin,bsd->m_collisionMargin); + switch (shapeData->m_shapeType) + { + case BOX_SHAPE_PROXYTYPE: + { + btBoxShape* box= (btBoxShape*)createBoxShape(implicitShapeDimensions/localScaling+margin); + //box->initializePolyhedralFeatures(); + shape = box; + + break; + } + case SPHERE_SHAPE_PROXYTYPE: + { + shape = createSphereShape(implicitShapeDimensions.getX()); + break; + } + case CAPSULE_SHAPE_PROXYTYPE: + { + btCapsuleShapeData* capData = (btCapsuleShapeData*)shapeData; + switch (capData->m_upAxis) + { + case 0: + { + shape = createCapsuleShapeX(implicitShapeDimensions.getY()+bsd->m_collisionMargin*2,2*implicitShapeDimensions.getX()); + break; + } + case 1: + { + shape = createCapsuleShapeY(implicitShapeDimensions.getX()+bsd->m_collisionMargin*2,2*implicitShapeDimensions.getY()); + break; + } + case 2: + { + shape = createCapsuleShapeZ(implicitShapeDimensions.getX()+bsd->m_collisionMargin*2,2*implicitShapeDimensions.getZ()); + break; + } + default: + { + printf("error: wrong up axis for btCapsuleShape\n"); + } + bsd->m_collisionMargin = 0.f; + + }; + + break; + } + case CYLINDER_SHAPE_PROXYTYPE: + { + btCylinderShapeData* cylData = (btCylinderShapeData*) shapeData; + btVector3 halfExtents = implicitShapeDimensions+margin; + switch (cylData->m_upAxis) + { + case 0: + { + shape = createCylinderShapeX(halfExtents.getY(),halfExtents.getX()); + break; + } + case 1: + { + shape = createCylinderShapeY(halfExtents.getX(),halfExtents.getY()); + break; + } + case 2: + { + shape = createCylinderShapeZ(halfExtents.getX(),halfExtents.getZ()); + break; + } + default: + { + printf("unknown Cylinder up axis\n"); + } + + }; + + + + break; + } + case CONE_SHAPE_PROXYTYPE: + { + btConeShapeData* conData = (btConeShapeData*) shapeData; + btVector3 halfExtents = implicitShapeDimensions;//+margin; + switch (conData->m_upIndex) + { + case 0: + { + shape = createConeShapeX(halfExtents.getY(),halfExtents.getX()); + break; + } + case 1: + { + shape = createConeShapeY(halfExtents.getX(),halfExtents.getY()); + break; + } + case 2: + { + shape = createConeShapeZ(halfExtents.getX(),halfExtents.getZ()); + break; + } + default: + { + printf("unknown Cone up axis\n"); + } + + }; + + + + break; + } + case MULTI_SPHERE_SHAPE_PROXYTYPE: + { + btMultiSphereShapeData* mss = (btMultiSphereShapeData*)bsd; + int numSpheres = mss->m_localPositionArraySize; + + btAlignedObjectArray tmpPos; + btAlignedObjectArray radii; + radii.resize(numSpheres); + tmpPos.resize(numSpheres); + int i; + for ( i=0;im_localPositionArrayPtr[i].m_pos); + radii[i] = mss->m_localPositionArrayPtr[i].m_radius; + } + shape = createMultiSphereShape(&tmpPos[0],&radii[0],numSpheres); + break; + } + case CONVEX_HULL_SHAPE_PROXYTYPE: + { + // int sz = sizeof(btConvexHullShapeData); + // int sz2 = sizeof(btConvexInternalShapeData); + // int sz3 = sizeof(btCollisionShapeData); + btConvexHullShapeData* convexData = (btConvexHullShapeData*)bsd; + int numPoints = convexData->m_numUnscaledPoints; + + btAlignedObjectArray tmpPoints; + tmpPoints.resize(numPoints); + int i; + for ( i=0;im_unscaledPointsDoublePtr) + tmpPoints[i].deSerialize(convexData->m_unscaledPointsDoublePtr[i]); + if (convexData->m_unscaledPointsFloatPtr) + tmpPoints[i].deSerializeFloat(convexData->m_unscaledPointsFloatPtr[i]); +#else + if (convexData->m_unscaledPointsFloatPtr) + tmpPoints[i].deSerialize(convexData->m_unscaledPointsFloatPtr[i]); + if (convexData->m_unscaledPointsDoublePtr) + tmpPoints[i].deSerializeDouble(convexData->m_unscaledPointsDoublePtr[i]); +#endif //BT_USE_DOUBLE_PRECISION + } + btConvexHullShape* hullShape = createConvexHullShape(); + for (i=0;iaddPoint(tmpPoints[i]); + } + hullShape->setMargin(bsd->m_collisionMargin); + //hullShape->initializePolyhedralFeatures(); + shape = hullShape; + break; + } + default: + { + printf("error: cannot create shape type (%d)\n",shapeData->m_shapeType); + } + } + + if (shape) + { + shape->setMargin(bsd->m_collisionMargin); + + btVector3 localScaling; + localScaling.deSerializeFloat(bsd->m_localScaling); + shape->setLocalScaling(localScaling); + + } + break; + } + case TRIANGLE_MESH_SHAPE_PROXYTYPE: + { + btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData; + btStridingMeshInterfaceData* interfaceData = createStridingMeshInterfaceData(&trimesh->m_meshInterface); + btTriangleIndexVertexArray* meshInterface = createMeshInterface(*interfaceData); + if (!meshInterface->getNumSubParts()) + { + return 0; + } + + btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling); + meshInterface->setScaling(scaling); + + + btOptimizedBvh* bvh = 0; +#if 1 + if (trimesh->m_quantizedFloatBvh) + { + btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedFloatBvh); + if (bvhPtr && *bvhPtr) + { + bvh = *bvhPtr; + } else + { + bvh = createOptimizedBvh(); + bvh->deSerializeFloat(*trimesh->m_quantizedFloatBvh); + } + } + if (trimesh->m_quantizedDoubleBvh) + { + btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedDoubleBvh); + if (bvhPtr && *bvhPtr) + { + bvh = *bvhPtr; + } else + { + bvh = createOptimizedBvh(); + bvh->deSerializeDouble(*trimesh->m_quantizedDoubleBvh); + } + } +#endif + + + btBvhTriangleMeshShape* trimeshShape = createBvhTriangleMeshShape(meshInterface,bvh); + trimeshShape->setMargin(trimesh->m_collisionMargin); + shape = trimeshShape; + + if (trimesh->m_triangleInfoMap) + { + btTriangleInfoMap* map = createTriangleInfoMap(); + map->deSerialize(*trimesh->m_triangleInfoMap); + trimeshShape->setTriangleInfoMap(map); + +#ifdef USE_INTERNAL_EDGE_UTILITY + gContactAddedCallback = btAdjustInternalEdgeContactsCallback; +#endif //USE_INTERNAL_EDGE_UTILITY + + } + + //printf("trimesh->m_collisionMargin=%f\n",trimesh->m_collisionMargin); + break; + } + case COMPOUND_SHAPE_PROXYTYPE: + { + btCompoundShapeData* compoundData = (btCompoundShapeData*)shapeData; + btCompoundShape* compoundShape = createCompoundShape(); + + btCompoundShapeChildData* childShapeDataArray = &compoundData->m_childShapePtr[0]; + + + btAlignedObjectArray childShapes; + for (int i=0;im_numChildShapes;i++) + { + btCompoundShapeChildData* ptr = &compoundData->m_childShapePtr[i]; + + btCollisionShapeData* cd = compoundData->m_childShapePtr[i].m_childShape; + + btCollisionShape* childShape = convertCollisionShape(cd); + if (childShape) + { + btTransform localTransform; + localTransform.deSerializeFloat(compoundData->m_childShapePtr[i].m_transform); + compoundShape->addChildShape(localTransform,childShape); + } else + { +#ifdef _DEBUG + printf("error: couldn't create childShape for compoundShape\n"); +#endif + } + + } + shape = compoundShape; + + break; + } + case SOFTBODY_SHAPE_PROXYTYPE: + { + return 0; + } + default: + { +#ifdef _DEBUG + printf("unsupported shape type (%d)\n",shapeData->m_shapeType); +#endif + } + } + + return shape; + +} + + + +char* btWorldImporter::duplicateName(const char* name) +{ + if (name) + { + int l = (int)strlen(name); + char* newName = new char[l+1]; + memcpy(newName,name,l); + newName[l] = 0; + m_allocatedNames.push_back(newName); + return newName; + } + return 0; +} + +void btWorldImporter::convertConstraintBackwardsCompatible281(btTypedConstraintData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion) +{ + + btTypedConstraint* constraint = 0; + + switch (constraintData->m_objectType) + { + case POINT2POINT_CONSTRAINT_TYPE: + { + btPoint2PointConstraintDoubleData* p2pData = (btPoint2PointConstraintDoubleData*)constraintData; + if (rbA && rbB) + { + btVector3 pivotInA,pivotInB; + pivotInA.deSerializeDouble(p2pData->m_pivotInA); + pivotInB.deSerializeDouble(p2pData->m_pivotInB); + constraint = createPoint2PointConstraint(*rbA,*rbB,pivotInA,pivotInB); + } else + { + btVector3 pivotInA; + pivotInA.deSerializeDouble(p2pData->m_pivotInA); + constraint = createPoint2PointConstraint(*rbA,pivotInA); + } + break; + } + case HINGE_CONSTRAINT_TYPE: + { + btHingeConstraint* hinge = 0; + + btHingeConstraintDoubleData* hingeData = (btHingeConstraintDoubleData*)constraintData; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(hingeData->m_rbAFrame); + rbBFrame.deSerializeDouble(hingeData->m_rbBFrame); + hinge = createHingeConstraint(*rbA,*rbB,rbAFrame,rbBFrame,hingeData->m_useReferenceFrameA!=0); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeDouble(hingeData->m_rbAFrame); + hinge = createHingeConstraint(*rbA,rbAFrame,hingeData->m_useReferenceFrameA!=0); + } + if (hingeData->m_enableAngularMotor) + { + hinge->enableAngularMotor(true,(btScalar)hingeData->m_motorTargetVelocity,(btScalar)hingeData->m_maxMotorImpulse); + } + hinge->setAngularOnly(hingeData->m_angularOnly!=0); + hinge->setLimit(btScalar(hingeData->m_lowerLimit),btScalar(hingeData->m_upperLimit),btScalar(hingeData->m_limitSoftness),btScalar(hingeData->m_biasFactor),btScalar(hingeData->m_relaxationFactor)); + + constraint = hinge; + break; + + } + case CONETWIST_CONSTRAINT_TYPE: + { + btConeTwistConstraintData* coneData = (btConeTwistConstraintData*)constraintData; + btConeTwistConstraint* coneTwist = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(coneData->m_rbAFrame); + rbBFrame.deSerializeFloat(coneData->m_rbBFrame); + coneTwist = createConeTwistConstraint(*rbA,*rbB,rbAFrame,rbBFrame); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeFloat(coneData->m_rbAFrame); + coneTwist = createConeTwistConstraint(*rbA,rbAFrame); + } + coneTwist->setLimit((btScalar)coneData->m_swingSpan1,(btScalar)coneData->m_swingSpan2,(btScalar)coneData->m_twistSpan,(btScalar)coneData->m_limitSoftness, + (btScalar)coneData->m_biasFactor,(btScalar)coneData->m_relaxationFactor); + coneTwist->setDamping((btScalar)coneData->m_damping); + + constraint = coneTwist; + break; + } + + case D6_SPRING_CONSTRAINT_TYPE: + { + + btGeneric6DofSpringConstraintData* dofData = (btGeneric6DofSpringConstraintData*)constraintData; + // int sz = sizeof(btGeneric6DofSpringConstraintData); + btGeneric6DofSpringConstraint* dof = 0; + + if (rbA && rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(dofData->m_6dofData.m_rbAFrame); + rbBFrame.deSerializeFloat(dofData->m_6dofData.m_rbBFrame); + dof = createGeneric6DofSpringConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_6dofData.m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofSpringConstraint: requires rbA && rbB\n"); + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeFloat(dofData->m_6dofData.m_angularLowerLimit); + angUpperLimit.deSerializeFloat(dofData->m_6dofData.m_angularUpperLimit); + linLowerLimit.deSerializeFloat(dofData->m_6dofData.m_linearLowerLimit); + linUpperlimit.deSerializeFloat(dofData->m_6dofData.m_linearUpperLimit); + + angLowerLimit.setW(0.f); + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + + int i; + if (fileVersion>280) + { + for (i=0;i<6;i++) + { + dof->setStiffness(i,(btScalar)dofData->m_springStiffness[i]); + dof->setEquilibriumPoint(i,(btScalar)dofData->m_equilibriumPoint[i]); + dof->enableSpring(i,dofData->m_springEnabled[i]!=0); + dof->setDamping(i,(btScalar)dofData->m_springDamping[i]); + } + } + } + + constraint = dof; + break; + + } + case D6_CONSTRAINT_TYPE: + { + btGeneric6DofConstraintData* dofData = (btGeneric6DofConstraintData*)constraintData; + btGeneric6DofConstraint* dof = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(dofData->m_rbAFrame); + rbBFrame.deSerializeFloat(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + if (rbB) + { + btTransform rbBFrame; + rbBFrame.deSerializeFloat(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbB,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofConstraint: missing rbB\n"); + } + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeFloat(dofData->m_angularLowerLimit); + angUpperLimit.deSerializeFloat(dofData->m_angularUpperLimit); + linLowerLimit.deSerializeFloat(dofData->m_linearLowerLimit); + linUpperlimit.deSerializeFloat(dofData->m_linearUpperLimit); + + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + } + + constraint = dof; + break; + } + case SLIDER_CONSTRAINT_TYPE: + { + btSliderConstraintData* sliderData = (btSliderConstraintData*)constraintData; + btSliderConstraint* slider = 0; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(sliderData->m_rbAFrame); + rbBFrame.deSerializeFloat(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbA,*rbB,rbAFrame,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } else + { + btTransform rbBFrame; + rbBFrame.deSerializeFloat(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbB,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } + slider->setLowerLinLimit((btScalar)sliderData->m_linearLowerLimit); + slider->setUpperLinLimit((btScalar)sliderData->m_linearUpperLimit); + slider->setLowerAngLimit((btScalar)sliderData->m_angularLowerLimit); + slider->setUpperAngLimit((btScalar)sliderData->m_angularUpperLimit); + slider->setUseFrameOffset(sliderData->m_useOffsetForConstraintFrame!=0); + constraint = slider; + break; + } + + default: + { + printf("unknown constraint type\n"); + } + }; + + if (constraint) + { + constraint->setDbgDrawSize((btScalar)constraintData->m_dbgDrawSize); + ///those fields didn't exist and set to zero for pre-280 versions, so do a check here + if (fileVersion>=280) + { + constraint->setBreakingImpulseThreshold((btScalar)constraintData->m_breakingImpulseThreshold); + constraint->setEnabled(constraintData->m_isEnabled!=0); + constraint->setOverrideNumSolverIterations(constraintData->m_overrideNumSolverIterations); + } + + if (constraintData->m_name) + { + char* newname = duplicateName(constraintData->m_name); + m_nameConstraintMap.insert(newname,constraint); + m_objectNameMap.insert(constraint,newname); + } + if(m_dynamicsWorld) + m_dynamicsWorld->addConstraint(constraint,constraintData->m_disableCollisionsBetweenLinkedBodies!=0); + } + +} + +void btWorldImporter::convertConstraintFloat(btTypedConstraintFloatData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion) +{ + btTypedConstraint* constraint = 0; + + switch (constraintData->m_objectType) + { + case POINT2POINT_CONSTRAINT_TYPE: + { + btPoint2PointConstraintFloatData* p2pData = (btPoint2PointConstraintFloatData*)constraintData; + if (rbA&& rbB) + { + btVector3 pivotInA,pivotInB; + pivotInA.deSerializeFloat(p2pData->m_pivotInA); + pivotInB.deSerializeFloat(p2pData->m_pivotInB); + constraint = createPoint2PointConstraint(*rbA,*rbB,pivotInA,pivotInB); + + } else + { + btVector3 pivotInA; + pivotInA.deSerializeFloat(p2pData->m_pivotInA); + constraint = createPoint2PointConstraint(*rbA,pivotInA); + } + break; + } + case HINGE_CONSTRAINT_TYPE: + { + btHingeConstraint* hinge = 0; + btHingeConstraintFloatData* hingeData = (btHingeConstraintFloatData*)constraintData; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(hingeData->m_rbAFrame); + rbBFrame.deSerializeFloat(hingeData->m_rbBFrame); + hinge = createHingeConstraint(*rbA,*rbB,rbAFrame,rbBFrame,hingeData->m_useReferenceFrameA!=0); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeFloat(hingeData->m_rbAFrame); + hinge = createHingeConstraint(*rbA,rbAFrame,hingeData->m_useReferenceFrameA!=0); + } + if (hingeData->m_enableAngularMotor) + { + hinge->enableAngularMotor(true,hingeData->m_motorTargetVelocity,hingeData->m_maxMotorImpulse); + } + hinge->setAngularOnly(hingeData->m_angularOnly!=0); + hinge->setLimit(btScalar(hingeData->m_lowerLimit),btScalar(hingeData->m_upperLimit),btScalar(hingeData->m_limitSoftness),btScalar(hingeData->m_biasFactor),btScalar(hingeData->m_relaxationFactor)); + + constraint = hinge; + break; + + } + case CONETWIST_CONSTRAINT_TYPE: + { + btConeTwistConstraintData* coneData = (btConeTwistConstraintData*)constraintData; + btConeTwistConstraint* coneTwist = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(coneData->m_rbAFrame); + rbBFrame.deSerializeFloat(coneData->m_rbBFrame); + coneTwist = createConeTwistConstraint(*rbA,*rbB,rbAFrame,rbBFrame); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeFloat(coneData->m_rbAFrame); + coneTwist = createConeTwistConstraint(*rbA,rbAFrame); + } + coneTwist->setLimit(coneData->m_swingSpan1,coneData->m_swingSpan2,coneData->m_twistSpan,coneData->m_limitSoftness,coneData->m_biasFactor,coneData->m_relaxationFactor); + coneTwist->setDamping(coneData->m_damping); + + constraint = coneTwist; + break; + } + + case D6_SPRING_CONSTRAINT_TYPE: + { + + btGeneric6DofSpringConstraintData* dofData = (btGeneric6DofSpringConstraintData*)constraintData; + // int sz = sizeof(btGeneric6DofSpringConstraintData); + btGeneric6DofSpringConstraint* dof = 0; + + if (rbA && rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(dofData->m_6dofData.m_rbAFrame); + rbBFrame.deSerializeFloat(dofData->m_6dofData.m_rbBFrame); + dof = createGeneric6DofSpringConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_6dofData.m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofSpringConstraint: requires rbA && rbB\n"); + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeFloat(dofData->m_6dofData.m_angularLowerLimit); + angUpperLimit.deSerializeFloat(dofData->m_6dofData.m_angularUpperLimit); + linLowerLimit.deSerializeFloat(dofData->m_6dofData.m_linearLowerLimit); + linUpperlimit.deSerializeFloat(dofData->m_6dofData.m_linearUpperLimit); + + angLowerLimit.setW(0.f); + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + + int i; + if (fileVersion>280) + { + for (i=0;i<6;i++) + { + dof->setStiffness(i,dofData->m_springStiffness[i]); + dof->setEquilibriumPoint(i,dofData->m_equilibriumPoint[i]); + dof->enableSpring(i,dofData->m_springEnabled[i]!=0); + dof->setDamping(i,dofData->m_springDamping[i]); + } + } + } + + constraint = dof; + break; + } + case D6_CONSTRAINT_TYPE: + { + btGeneric6DofConstraintData* dofData = (btGeneric6DofConstraintData*)constraintData; + btGeneric6DofConstraint* dof = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(dofData->m_rbAFrame); + rbBFrame.deSerializeFloat(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + if (rbB) + { + btTransform rbBFrame; + rbBFrame.deSerializeFloat(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbB,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofConstraint: missing rbB\n"); + } + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeFloat(dofData->m_angularLowerLimit); + angUpperLimit.deSerializeFloat(dofData->m_angularUpperLimit); + linLowerLimit.deSerializeFloat(dofData->m_linearLowerLimit); + linUpperlimit.deSerializeFloat(dofData->m_linearUpperLimit); + + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + } + + constraint = dof; + break; + } + case SLIDER_CONSTRAINT_TYPE: + { + btSliderConstraintData* sliderData = (btSliderConstraintData*)constraintData; + btSliderConstraint* slider = 0; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeFloat(sliderData->m_rbAFrame); + rbBFrame.deSerializeFloat(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbA,*rbB,rbAFrame,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } else + { + btTransform rbBFrame; + rbBFrame.deSerializeFloat(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbB,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } + slider->setLowerLinLimit(sliderData->m_linearLowerLimit); + slider->setUpperLinLimit(sliderData->m_linearUpperLimit); + slider->setLowerAngLimit(sliderData->m_angularLowerLimit); + slider->setUpperAngLimit(sliderData->m_angularUpperLimit); + slider->setUseFrameOffset(sliderData->m_useOffsetForConstraintFrame!=0); + constraint = slider; + break; + } + case GEAR_CONSTRAINT_TYPE: + { + btGearConstraintFloatData* gearData = (btGearConstraintFloatData*) constraintData; + btGearConstraint* gear = 0; + if (rbA&&rbB) + { + btVector3 axisInA,axisInB; + axisInA.deSerializeFloat(gearData->m_axisInA); + axisInB.deSerializeFloat(gearData->m_axisInB); + gear = createGearConstraint(*rbA, *rbB, axisInA,axisInB, gearData->m_ratio); + } else + { + btAssert(0); + //perhaps a gear against a 'fixed' body, while the 'fixed' body is not serialized? + //btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio=1.f); + } + constraint = gear; + break; + } + default: + { + printf("unknown constraint type\n"); + } + }; + + if (constraint) + { + constraint->setDbgDrawSize(constraintData->m_dbgDrawSize); + ///those fields didn't exist and set to zero for pre-280 versions, so do a check here + if (fileVersion>=280) + { + constraint->setBreakingImpulseThreshold(constraintData->m_breakingImpulseThreshold); + constraint->setEnabled(constraintData->m_isEnabled!=0); + constraint->setOverrideNumSolverIterations(constraintData->m_overrideNumSolverIterations); + } + + if (constraintData->m_name) + { + char* newname = duplicateName(constraintData->m_name); + m_nameConstraintMap.insert(newname,constraint); + m_objectNameMap.insert(constraint,newname); + } + if(m_dynamicsWorld) + m_dynamicsWorld->addConstraint(constraint,constraintData->m_disableCollisionsBetweenLinkedBodies!=0); + } + + +} + + + +void btWorldImporter::convertConstraintDouble(btTypedConstraintDoubleData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion) +{ + btTypedConstraint* constraint = 0; + + switch (constraintData->m_objectType) + { + case POINT2POINT_CONSTRAINT_TYPE: + { + btPoint2PointConstraintDoubleData2* p2pData = (btPoint2PointConstraintDoubleData2*)constraintData; + if (rbA && rbB) + { + btVector3 pivotInA,pivotInB; + pivotInA.deSerializeDouble(p2pData->m_pivotInA); + pivotInB.deSerializeDouble(p2pData->m_pivotInB); + constraint = createPoint2PointConstraint(*rbA,*rbB,pivotInA,pivotInB); + } else + { + btVector3 pivotInA; + pivotInA.deSerializeDouble(p2pData->m_pivotInA); + constraint = createPoint2PointConstraint(*rbA,pivotInA); + } + break; + } + case HINGE_CONSTRAINT_TYPE: + { + btHingeConstraint* hinge = 0; + + btHingeConstraintDoubleData2* hingeData = (btHingeConstraintDoubleData2*)constraintData; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(hingeData->m_rbAFrame); + rbBFrame.deSerializeDouble(hingeData->m_rbBFrame); + hinge = createHingeConstraint(*rbA,*rbB,rbAFrame,rbBFrame,hingeData->m_useReferenceFrameA!=0); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeDouble(hingeData->m_rbAFrame); + hinge = createHingeConstraint(*rbA,rbAFrame,hingeData->m_useReferenceFrameA!=0); + } + if (hingeData->m_enableAngularMotor) + { + hinge->enableAngularMotor(true,(btScalar)hingeData->m_motorTargetVelocity,(btScalar)hingeData->m_maxMotorImpulse); + } + hinge->setAngularOnly(hingeData->m_angularOnly!=0); + hinge->setLimit(btScalar(hingeData->m_lowerLimit),btScalar(hingeData->m_upperLimit),btScalar(hingeData->m_limitSoftness),btScalar(hingeData->m_biasFactor),btScalar(hingeData->m_relaxationFactor)); + + constraint = hinge; + break; + + } + case CONETWIST_CONSTRAINT_TYPE: + { + btConeTwistConstraintDoubleData* coneData = (btConeTwistConstraintDoubleData*)constraintData; + btConeTwistConstraint* coneTwist = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(coneData->m_rbAFrame); + rbBFrame.deSerializeDouble(coneData->m_rbBFrame); + coneTwist = createConeTwistConstraint(*rbA,*rbB,rbAFrame,rbBFrame); + } else + { + btTransform rbAFrame; + rbAFrame.deSerializeDouble(coneData->m_rbAFrame); + coneTwist = createConeTwistConstraint(*rbA,rbAFrame); + } + coneTwist->setLimit((btScalar)coneData->m_swingSpan1,(btScalar)coneData->m_swingSpan2,(btScalar)coneData->m_twistSpan,(btScalar)coneData->m_limitSoftness, + (btScalar)coneData->m_biasFactor,(btScalar)coneData->m_relaxationFactor); + coneTwist->setDamping((btScalar)coneData->m_damping); + + constraint = coneTwist; + break; + } + + case D6_SPRING_CONSTRAINT_TYPE: + { + + btGeneric6DofSpringConstraintDoubleData2* dofData = (btGeneric6DofSpringConstraintDoubleData2*)constraintData; + // int sz = sizeof(btGeneric6DofSpringConstraintData); + btGeneric6DofSpringConstraint* dof = 0; + + if (rbA && rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(dofData->m_6dofData.m_rbAFrame); + rbBFrame.deSerializeDouble(dofData->m_6dofData.m_rbBFrame); + dof = createGeneric6DofSpringConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_6dofData.m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofSpringConstraint: requires rbA && rbB\n"); + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeDouble(dofData->m_6dofData.m_angularLowerLimit); + angUpperLimit.deSerializeDouble(dofData->m_6dofData.m_angularUpperLimit); + linLowerLimit.deSerializeDouble(dofData->m_6dofData.m_linearLowerLimit); + linUpperlimit.deSerializeDouble(dofData->m_6dofData.m_linearUpperLimit); + + angLowerLimit.setW(0.f); + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + + int i; + if (fileVersion>280) + { + for (i=0;i<6;i++) + { + dof->setStiffness(i,(btScalar)dofData->m_springStiffness[i]); + dof->setEquilibriumPoint(i,(btScalar)dofData->m_equilibriumPoint[i]); + dof->enableSpring(i,dofData->m_springEnabled[i]!=0); + dof->setDamping(i,(btScalar)dofData->m_springDamping[i]); + } + } + } + + constraint = dof; + break; + } + case D6_CONSTRAINT_TYPE: + { + btGeneric6DofConstraintDoubleData2* dofData = (btGeneric6DofConstraintDoubleData2*)constraintData; + btGeneric6DofConstraint* dof = 0; + + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(dofData->m_rbAFrame); + rbBFrame.deSerializeDouble(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + if (rbB) + { + btTransform rbBFrame; + rbBFrame.deSerializeDouble(dofData->m_rbBFrame); + dof = createGeneric6DofConstraint(*rbB,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); + } else + { + printf("Error in btWorldImporter::createGeneric6DofConstraint: missing rbB\n"); + } + } + + if (dof) + { + btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; + angLowerLimit.deSerializeDouble(dofData->m_angularLowerLimit); + angUpperLimit.deSerializeDouble(dofData->m_angularUpperLimit); + linLowerLimit.deSerializeDouble(dofData->m_linearLowerLimit); + linUpperlimit.deSerializeDouble(dofData->m_linearUpperLimit); + + dof->setAngularLowerLimit(angLowerLimit); + dof->setAngularUpperLimit(angUpperLimit); + dof->setLinearLowerLimit(linLowerLimit); + dof->setLinearUpperLimit(linUpperlimit); + } + + constraint = dof; + break; + } + case SLIDER_CONSTRAINT_TYPE: + { + btSliderConstraintDoubleData* sliderData = (btSliderConstraintDoubleData*)constraintData; + btSliderConstraint* slider = 0; + if (rbA&& rbB) + { + btTransform rbAFrame,rbBFrame; + rbAFrame.deSerializeDouble(sliderData->m_rbAFrame); + rbBFrame.deSerializeDouble(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbA,*rbB,rbAFrame,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } else + { + btTransform rbBFrame; + rbBFrame.deSerializeDouble(sliderData->m_rbBFrame); + slider = createSliderConstraint(*rbB,rbBFrame,sliderData->m_useLinearReferenceFrameA!=0); + } + slider->setLowerLinLimit((btScalar)sliderData->m_linearLowerLimit); + slider->setUpperLinLimit((btScalar)sliderData->m_linearUpperLimit); + slider->setLowerAngLimit((btScalar)sliderData->m_angularLowerLimit); + slider->setUpperAngLimit((btScalar)sliderData->m_angularUpperLimit); + slider->setUseFrameOffset(sliderData->m_useOffsetForConstraintFrame!=0); + constraint = slider; + break; + } + case GEAR_CONSTRAINT_TYPE: + { + btGearConstraintDoubleData* gearData = (btGearConstraintDoubleData*) constraintData; + btGearConstraint* gear = 0; + if (rbA&&rbB) + { + btVector3 axisInA,axisInB; + axisInA.deSerializeDouble(gearData->m_axisInA); + axisInB.deSerializeDouble(gearData->m_axisInB); + gear = createGearConstraint(*rbA, *rbB, axisInA,axisInB, gearData->m_ratio); + } else + { + btAssert(0); + //perhaps a gear against a 'fixed' body, while the 'fixed' body is not serialized? + //btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio=1.f); + } + constraint = gear; + break; + } + default: + { + printf("unknown constraint type\n"); + } + }; + + if (constraint) + { + constraint->setDbgDrawSize((btScalar)constraintData->m_dbgDrawSize); + ///those fields didn't exist and set to zero for pre-280 versions, so do a check here + if (fileVersion>=280) + { + constraint->setBreakingImpulseThreshold((btScalar)constraintData->m_breakingImpulseThreshold); + constraint->setEnabled(constraintData->m_isEnabled!=0); + constraint->setOverrideNumSolverIterations(constraintData->m_overrideNumSolverIterations); + } + + if (constraintData->m_name) + { + char* newname = duplicateName(constraintData->m_name); + m_nameConstraintMap.insert(newname,constraint); + m_objectNameMap.insert(constraint,newname); + } + if(m_dynamicsWorld) + m_dynamicsWorld->addConstraint(constraint,constraintData->m_disableCollisionsBetweenLinkedBodies!=0); + } + + +} + + + + + + + + + + +btTriangleIndexVertexArray* btWorldImporter::createMeshInterface(btStridingMeshInterfaceData& meshData) +{ + btTriangleIndexVertexArray* meshInterface = createTriangleMeshContainer(); + + for (int i=0;iaddIndexedMesh(meshPart,meshPart.m_indexType); + } + } + + return meshInterface; +} + + +btStridingMeshInterfaceData* btWorldImporter::createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData) +{ + //create a new btStridingMeshInterfaceData that is an exact copy of shapedata and store it in the WorldImporter + btStridingMeshInterfaceData* newData = new btStridingMeshInterfaceData; + + newData->m_scaling = interfaceData->m_scaling; + newData->m_numMeshParts = interfaceData->m_numMeshParts; + newData->m_meshPartsPtr = new btMeshPartData[newData->m_numMeshParts]; + + for(int i = 0;i < newData->m_numMeshParts;i++) + { + btMeshPartData* curPart = &interfaceData->m_meshPartsPtr[i]; + btMeshPartData* curNewPart = &newData->m_meshPartsPtr[i]; + + curNewPart->m_numTriangles = curPart->m_numTriangles; + curNewPart->m_numVertices = curPart->m_numVertices; + + if(curPart->m_vertices3f) + { + curNewPart->m_vertices3f = new btVector3FloatData[curNewPart->m_numVertices]; + memcpy(curNewPart->m_vertices3f,curPart->m_vertices3f,sizeof(btVector3FloatData) * curNewPart->m_numVertices); + } + else + curNewPart->m_vertices3f = NULL; + + if(curPart->m_vertices3d) + { + curNewPart->m_vertices3d = new btVector3DoubleData[curNewPart->m_numVertices]; + memcpy(curNewPart->m_vertices3d,curPart->m_vertices3d,sizeof(btVector3DoubleData) * curNewPart->m_numVertices); + } + else + curNewPart->m_vertices3d = NULL; + + int numIndices = curNewPart->m_numTriangles * 3; + ///the m_3indices8 was not initialized in some Bullet versions, this can cause crashes at loading time + ///we catch it by only dealing with m_3indices8 if none of the other indices are initialized + bool uninitialized3indices8Workaround =false; + + if(curPart->m_indices32) + { + uninitialized3indices8Workaround=true; + curNewPart->m_indices32 = new btIntIndexData[numIndices]; + memcpy(curNewPart->m_indices32,curPart->m_indices32,sizeof(btIntIndexData) * numIndices); + } + else + curNewPart->m_indices32 = NULL; + + if(curPart->m_3indices16) + { + uninitialized3indices8Workaround=true; + curNewPart->m_3indices16 = new btShortIntIndexTripletData[curNewPart->m_numTriangles]; + memcpy(curNewPart->m_3indices16,curPart->m_3indices16,sizeof(btShortIntIndexTripletData) * curNewPart->m_numTriangles); + } + else + curNewPart->m_3indices16 = NULL; + + if(curPart->m_indices16) + { + uninitialized3indices8Workaround=true; + curNewPart->m_indices16 = new btShortIntIndexData[numIndices]; + memcpy(curNewPart->m_indices16,curPart->m_indices16,sizeof(btShortIntIndexData) * numIndices); + } + else + curNewPart->m_indices16 = NULL; + + if(!uninitialized3indices8Workaround && curPart->m_3indices8) + { + curNewPart->m_3indices8 = new btCharIndexTripletData[curNewPart->m_numTriangles]; + memcpy(curNewPart->m_3indices8,curPart->m_3indices8,sizeof(btCharIndexTripletData) * curNewPart->m_numTriangles); + } + else + curNewPart->m_3indices8 = NULL; + + } + + m_allocatedbtStridingMeshInterfaceDatas.push_back(newData); + + return(newData); +} + +#ifdef USE_INTERNAL_EDGE_UTILITY +extern ContactAddedCallback gContactAddedCallback; + +static bool btAdjustInternalEdgeContactsCallback(btManifoldPoint& cp, const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1) +{ + + btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1); + //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_BACKFACE_MODE); + //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_DOUBLE_SIDED+BT_TRIANGLE_CONCAVE_DOUBLE_SIDED); + return true; +} +#endif //USE_INTERNAL_EDGE_UTILITY + + + + +btCollisionObject* btWorldImporter::createCollisionObject(const btTransform& startTransform,btCollisionShape* shape, const char* bodyName) +{ + return createRigidBody(false,0,startTransform,shape,bodyName); +} + +void btWorldImporter::setDynamicsWorldInfo(const btVector3& gravity, const btContactSolverInfo& solverInfo) +{ + if (m_dynamicsWorld) + { + m_dynamicsWorld->setGravity(gravity); + m_dynamicsWorld->getSolverInfo() = solverInfo; + } + +} + +btRigidBody* btWorldImporter::createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform,btCollisionShape* shape,const char* bodyName) +{ + btVector3 localInertia; + localInertia.setZero(); + + if (mass) + shape->calculateLocalInertia(mass,localInertia); + + btRigidBody* body = new btRigidBody(mass,0,shape,localInertia); + body->setWorldTransform(startTransform); + + if (m_dynamicsWorld) + m_dynamicsWorld->addRigidBody(body); + + if (bodyName) + { + char* newname = duplicateName(bodyName); + m_objectNameMap.insert(body,newname); + m_nameBodyMap.insert(newname,body); + } + m_allocatedRigidBodies.push_back(body); + return body; + +} + +btCollisionShape* btWorldImporter::createPlaneShape(const btVector3& planeNormal,btScalar planeConstant) +{ + btStaticPlaneShape* shape = new btStaticPlaneShape(planeNormal,planeConstant); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} +btCollisionShape* btWorldImporter::createBoxShape(const btVector3& halfExtents) +{ + btBoxShape* shape = new btBoxShape(halfExtents); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} +btCollisionShape* btWorldImporter::createSphereShape(btScalar radius) +{ + btSphereShape* shape = new btSphereShape(radius); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + + +btCollisionShape* btWorldImporter::createCapsuleShapeX(btScalar radius, btScalar height) +{ + btCapsuleShapeX* shape = new btCapsuleShapeX(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createCapsuleShapeY(btScalar radius, btScalar height) +{ + btCapsuleShape* shape = new btCapsuleShape(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createCapsuleShapeZ(btScalar radius, btScalar height) +{ + btCapsuleShapeZ* shape = new btCapsuleShapeZ(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createCylinderShapeX(btScalar radius,btScalar height) +{ + btCylinderShapeX* shape = new btCylinderShapeX(btVector3(height,radius,radius)); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createCylinderShapeY(btScalar radius,btScalar height) +{ + btCylinderShape* shape = new btCylinderShape(btVector3(radius,height,radius)); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createCylinderShapeZ(btScalar radius,btScalar height) +{ + btCylinderShapeZ* shape = new btCylinderShapeZ(btVector3(radius,radius,height)); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createConeShapeX(btScalar radius,btScalar height) +{ + btConeShapeX* shape = new btConeShapeX(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createConeShapeY(btScalar radius,btScalar height) +{ + btConeShape* shape = new btConeShape(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCollisionShape* btWorldImporter::createConeShapeZ(btScalar radius,btScalar height) +{ + btConeShapeZ* shape = new btConeShapeZ(radius,height); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btTriangleIndexVertexArray* btWorldImporter::createTriangleMeshContainer() +{ + btTriangleIndexVertexArray* in = new btTriangleIndexVertexArray(); + m_allocatedTriangleIndexArrays.push_back(in); + return in; +} + +btOptimizedBvh* btWorldImporter::createOptimizedBvh() +{ + btOptimizedBvh* bvh = new btOptimizedBvh(); + m_allocatedBvhs.push_back(bvh); + return bvh; +} + + +btTriangleInfoMap* btWorldImporter::createTriangleInfoMap() +{ + btTriangleInfoMap* tim = new btTriangleInfoMap(); + m_allocatedTriangleInfoMaps.push_back(tim); + return tim; +} + +btBvhTriangleMeshShape* btWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh) +{ + if (bvh) + { + btBvhTriangleMeshShape* bvhTriMesh = new btBvhTriangleMeshShape(trimesh,bvh->isQuantized(), false); + bvhTriMesh->setOptimizedBvh(bvh); + m_allocatedCollisionShapes.push_back(bvhTriMesh); + return bvhTriMesh; + } + + btBvhTriangleMeshShape* ts = new btBvhTriangleMeshShape(trimesh,true); + m_allocatedCollisionShapes.push_back(ts); + return ts; + +} +btCollisionShape* btWorldImporter::createConvexTriangleMeshShape(btStridingMeshInterface* trimesh) +{ + return 0; +} +btGImpactMeshShape* btWorldImporter::createGimpactShape(btStridingMeshInterface* trimesh) +{ + btGImpactMeshShape* shape = new btGImpactMeshShape(trimesh); + m_allocatedCollisionShapes.push_back(shape); + return shape; + +} +btConvexHullShape* btWorldImporter::createConvexHullShape() +{ + btConvexHullShape* shape = new btConvexHullShape(); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btCompoundShape* btWorldImporter::createCompoundShape() +{ + btCompoundShape* shape = new btCompoundShape(); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + + +btScaledBvhTriangleMeshShape* btWorldImporter::createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScaling) +{ + btScaledBvhTriangleMeshShape* shape = new btScaledBvhTriangleMeshShape(meshShape,localScaling); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btMultiSphereShape* btWorldImporter::createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres) +{ + btMultiSphereShape* shape = new btMultiSphereShape(positions, radi, numSpheres); + m_allocatedCollisionShapes.push_back(shape); + return shape; +} + +btRigidBody& btWorldImporter::getFixedBody() +{ + static btRigidBody s_fixed(0, 0,0); + s_fixed.setMassProps(btScalar(0.),btVector3(btScalar(0.),btScalar(0.),btScalar(0.))); + return s_fixed; +} + +btPoint2PointConstraint* btWorldImporter::createPoint2PointConstraint(btRigidBody& rbA,btRigidBody& rbB, const btVector3& pivotInA,const btVector3& pivotInB) +{ + btPoint2PointConstraint* p2p = new btPoint2PointConstraint(rbA,rbB,pivotInA,pivotInB); + m_allocatedConstraints.push_back(p2p); + return p2p; +} + +btPoint2PointConstraint* btWorldImporter::createPoint2PointConstraint(btRigidBody& rbA,const btVector3& pivotInA) +{ + btPoint2PointConstraint* p2p = new btPoint2PointConstraint(rbA,pivotInA); + m_allocatedConstraints.push_back(p2p); + return p2p; +} + + +btHingeConstraint* btWorldImporter::createHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA) +{ + btHingeConstraint* hinge = new btHingeConstraint(rbA,rbB,rbAFrame,rbBFrame,useReferenceFrameA); + m_allocatedConstraints.push_back(hinge); + return hinge; +} + +btHingeConstraint* btWorldImporter::createHingeConstraint(btRigidBody& rbA,const btTransform& rbAFrame, bool useReferenceFrameA) +{ + btHingeConstraint* hinge = new btHingeConstraint(rbA,rbAFrame,useReferenceFrameA); + m_allocatedConstraints.push_back(hinge); + return hinge; +} + +btConeTwistConstraint* btWorldImporter::createConeTwistConstraint(btRigidBody& rbA,btRigidBody& rbB,const btTransform& rbAFrame, const btTransform& rbBFrame) +{ + btConeTwistConstraint* cone = new btConeTwistConstraint(rbA,rbB,rbAFrame,rbBFrame); + m_allocatedConstraints.push_back(cone); + return cone; +} + +btConeTwistConstraint* btWorldImporter::createConeTwistConstraint(btRigidBody& rbA,const btTransform& rbAFrame) +{ + btConeTwistConstraint* cone = new btConeTwistConstraint(rbA,rbAFrame); + m_allocatedConstraints.push_back(cone); + return cone; +} + + +btGeneric6DofConstraint* btWorldImporter::createGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA) +{ + btGeneric6DofConstraint* dof = new btGeneric6DofConstraint(rbA,rbB,frameInA,frameInB,useLinearReferenceFrameA); + m_allocatedConstraints.push_back(dof); + return dof; +} + +btGeneric6DofConstraint* btWorldImporter::createGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB) +{ + btGeneric6DofConstraint* dof = new btGeneric6DofConstraint(rbB,frameInB,useLinearReferenceFrameB); + m_allocatedConstraints.push_back(dof); + return dof; +} + +btGeneric6DofSpringConstraint* btWorldImporter::createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA) +{ + btGeneric6DofSpringConstraint* dof = new btGeneric6DofSpringConstraint(rbA,rbB,frameInA,frameInB,useLinearReferenceFrameA); + m_allocatedConstraints.push_back(dof); + return dof; +} + + +btSliderConstraint* btWorldImporter::createSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA) +{ + btSliderConstraint* slider = new btSliderConstraint(rbA,rbB,frameInA,frameInB,useLinearReferenceFrameA); + m_allocatedConstraints.push_back(slider); + return slider; +} + +btSliderConstraint* btWorldImporter::createSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA) +{ + btSliderConstraint* slider = new btSliderConstraint(rbB,frameInB,useLinearReferenceFrameA); + m_allocatedConstraints.push_back(slider); + return slider; +} + +btGearConstraint* btWorldImporter::createGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio) +{ + btGearConstraint* gear = new btGearConstraint(rbA,rbB,axisInA,axisInB,ratio); + m_allocatedConstraints.push_back(gear); + return gear; +} + + // query for data +int btWorldImporter::getNumCollisionShapes() const +{ + return m_allocatedCollisionShapes.size(); +} + +btCollisionShape* btWorldImporter::getCollisionShapeByIndex(int index) +{ + return m_allocatedCollisionShapes[index]; +} + +btCollisionShape* btWorldImporter::getCollisionShapeByName(const char* name) +{ + btCollisionShape** shapePtr = m_nameShapeMap.find(name); + if (shapePtr&& *shapePtr) + { + return *shapePtr; + } + return 0; +} + +btRigidBody* btWorldImporter::getRigidBodyByName(const char* name) +{ + btRigidBody** bodyPtr = m_nameBodyMap.find(name); + if (bodyPtr && *bodyPtr) + { + return *bodyPtr; + } + return 0; +} + +btTypedConstraint* btWorldImporter::getConstraintByName(const char* name) +{ + btTypedConstraint** constraintPtr = m_nameConstraintMap.find(name); + if (constraintPtr && *constraintPtr) + { + return *constraintPtr; + } + return 0; +} + +const char* btWorldImporter::getNameForPointer(const void* ptr) const +{ + const char*const * namePtr = m_objectNameMap.find(ptr); + if (namePtr && *namePtr) + return *namePtr; + return 0; +} + + +int btWorldImporter::getNumRigidBodies() const +{ + return m_allocatedRigidBodies.size(); +} + +btCollisionObject* btWorldImporter::getRigidBodyByIndex(int index) const +{ + return m_allocatedRigidBodies[index]; +} +int btWorldImporter::getNumConstraints() const +{ + return m_allocatedConstraints.size(); +} + +btTypedConstraint* btWorldImporter::getConstraintByIndex(int index) const +{ + return m_allocatedConstraints[index]; +} + +int btWorldImporter::getNumBvhs() const +{ + return m_allocatedBvhs.size(); +} + btOptimizedBvh* btWorldImporter::getBvhByIndex(int index) const +{ + return m_allocatedBvhs[index]; +} + +int btWorldImporter::getNumTriangleInfoMaps() const +{ + return m_allocatedTriangleInfoMaps.size(); +} + +btTriangleInfoMap* btWorldImporter::getTriangleInfoMapByIndex(int index) const +{ + return m_allocatedTriangleInfoMaps[index]; +} + + +void btWorldImporter::convertRigidBodyFloat( btRigidBodyFloatData* colObjData) +{ + btScalar mass = btScalar(colObjData->m_inverseMass? 1.f/colObjData->m_inverseMass : 0.f); + btVector3 localInertia; + localInertia.setZero(); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); + if (shapePtr && *shapePtr) + { + btTransform startTransform; + colObjData->m_collisionObjectData.m_worldTransform.m_origin.m_floats[3] = 0.f; + startTransform.deSerializeFloat(colObjData->m_collisionObjectData.m_worldTransform); + + // startTransform.setBasis(btMatrix3x3::getIdentity()); + btCollisionShape* shape = (btCollisionShape*)*shapePtr; + if (shape->isNonMoving()) + { + mass = 0.f; + } + if (mass) + { + shape->calculateLocalInertia(mass,localInertia); + } + bool isDynamic = mass!=0.f; + btRigidBody* body = createRigidBody(isDynamic,mass,startTransform,shape,colObjData->m_collisionObjectData.m_name); + body->setFriction(colObjData->m_collisionObjectData.m_friction); + body->setRestitution(colObjData->m_collisionObjectData.m_restitution); + btVector3 linearFactor,angularFactor; + linearFactor.deSerializeFloat(colObjData->m_linearFactor); + angularFactor.deSerializeFloat(colObjData->m_angularFactor); + body->setLinearFactor(linearFactor); + body->setAngularFactor(angularFactor); + +#ifdef USE_INTERNAL_EDGE_UTILITY + if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) + { + btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape; + if (trimesh->getTriangleInfoMap()) + { + body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); + } + } +#endif //USE_INTERNAL_EDGE_UTILITY + m_bodyMap.insert(colObjData,body); + } else + { + printf("error: no shape found\n"); + } +} + +void btWorldImporter::convertRigidBodyDouble( btRigidBodyDoubleData* colObjData) +{ + btScalar mass = btScalar(colObjData->m_inverseMass? 1.f/colObjData->m_inverseMass : 0.f); + btVector3 localInertia; + localInertia.setZero(); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); + if (shapePtr && *shapePtr) + { + btTransform startTransform; + colObjData->m_collisionObjectData.m_worldTransform.m_origin.m_floats[3] = 0.f; + startTransform.deSerializeDouble(colObjData->m_collisionObjectData.m_worldTransform); + + // startTransform.setBasis(btMatrix3x3::getIdentity()); + btCollisionShape* shape = (btCollisionShape*)*shapePtr; + if (shape->isNonMoving()) + { + mass = 0.f; + } + if (mass) + { + shape->calculateLocalInertia(mass,localInertia); + } + bool isDynamic = mass!=0.f; + btRigidBody* body = createRigidBody(isDynamic,mass,startTransform,shape,colObjData->m_collisionObjectData.m_name); + body->setFriction(btScalar(colObjData->m_collisionObjectData.m_friction)); + body->setRestitution(btScalar(colObjData->m_collisionObjectData.m_restitution)); + btVector3 linearFactor,angularFactor; + linearFactor.deSerializeDouble(colObjData->m_linearFactor); + angularFactor.deSerializeDouble(colObjData->m_angularFactor); + body->setLinearFactor(linearFactor); + body->setAngularFactor(angularFactor); + + +#ifdef USE_INTERNAL_EDGE_UTILITY + if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) + { + btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape; + if (trimesh->getTriangleInfoMap()) + { + body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); + } + } +#endif //USE_INTERNAL_EDGE_UTILITY + m_bodyMap.insert(colObjData,body); + } else + { + printf("error: no shape found\n"); + } +} diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.h b/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.h new file mode 100644 index 00000000..bcd6405d --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/btWorldImporter.h @@ -0,0 +1,212 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + + +#ifndef BT_WORLD_IMPORTER_H +#define BT_WORLD_IMPORTER_H + +#include "LinearMath/btTransform.h" +#include "LinearMath/btVector3.h" +#include "LinearMath/btAlignedObjectArray.h" +#include "LinearMath/btHashMap.h" + +class btCollisionShape; +class btCollisionObject; +class btRigidBody; +class btTypedConstraint; +class btDynamicsWorld; +struct ConstraintInput; +class btRigidBodyColladaInfo; +struct btCollisionShapeData; +class btTriangleIndexVertexArray; +class btStridingMeshInterface; +struct btStridingMeshInterfaceData; +class btGImpactMeshShape; +class btOptimizedBvh; +struct btTriangleInfoMap; +class btBvhTriangleMeshShape; +class btPoint2PointConstraint; +class btHingeConstraint; +class btConeTwistConstraint; +class btGeneric6DofConstraint; +class btGeneric6DofSpringConstraint; +class btSliderConstraint; +class btGearConstraint; +struct btContactSolverInfo; +struct btTypedConstraintData; +struct btTypedConstraintFloatData; +struct btTypedConstraintDoubleData; + +struct btRigidBodyDoubleData; +struct btRigidBodyFloatData; + +#ifdef BT_USE_DOUBLE_PRECISION +#define btRigidBodyData btRigidBodyDoubleData +#else +#define btRigidBodyData btRigidBodyFloatData +#endif//BT_USE_DOUBLE_PRECISION + + +class btWorldImporter +{ +protected: + btDynamicsWorld* m_dynamicsWorld; + + int m_verboseMode; + + btAlignedObjectArray m_allocatedCollisionShapes; + btAlignedObjectArray m_allocatedRigidBodies; + btAlignedObjectArray m_allocatedConstraints; + btAlignedObjectArray m_allocatedBvhs; + btAlignedObjectArray m_allocatedTriangleInfoMaps; + btAlignedObjectArray m_allocatedTriangleIndexArrays; + btAlignedObjectArray m_allocatedbtStridingMeshInterfaceDatas; + + btAlignedObjectArray m_allocatedNames; + + btAlignedObjectArray m_indexArrays; + btAlignedObjectArray m_shortIndexArrays; + btAlignedObjectArray m_charIndexArrays; + + btAlignedObjectArray m_floatVertexArrays; + btAlignedObjectArray m_doubleVertexArrays; + + + btHashMap m_bvhMap; + btHashMap m_timMap; + + btHashMap m_nameShapeMap; + btHashMap m_nameBodyMap; + btHashMap m_nameConstraintMap; + btHashMap m_objectNameMap; + + btHashMap m_shapeMap; + btHashMap m_bodyMap; + + + //methods + + static btRigidBody& getFixedBody(); + + char* duplicateName(const char* name); + + btCollisionShape* convertCollisionShape( btCollisionShapeData* shapeData ); + + void convertConstraintBackwardsCompatible281(btTypedConstraintData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion); + void convertConstraintFloat(btTypedConstraintFloatData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion); + void convertConstraintDouble(btTypedConstraintDoubleData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion); + void convertRigidBodyFloat(btRigidBodyFloatData* colObjData); + void convertRigidBodyDouble( btRigidBodyDoubleData* colObjData); + +public: + + btWorldImporter(btDynamicsWorld* world); + + virtual ~btWorldImporter(); + + ///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load. + ///make sure you don't use the dynamics world containing objects after you call this method + virtual void deleteAllData(); + + void setVerboseMode(int verboseMode) + { + m_verboseMode = verboseMode; + } + + int getVerboseMode() const + { + return m_verboseMode; + } + + // query for data + int getNumCollisionShapes() const; + btCollisionShape* getCollisionShapeByIndex(int index); + int getNumRigidBodies() const; + btCollisionObject* getRigidBodyByIndex(int index) const; + int getNumConstraints() const; + btTypedConstraint* getConstraintByIndex(int index) const; + int getNumBvhs() const; + btOptimizedBvh* getBvhByIndex(int index) const; + int getNumTriangleInfoMaps() const; + btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const; + + // queris involving named objects + btCollisionShape* getCollisionShapeByName(const char* name); + btRigidBody* getRigidBodyByName(const char* name); + btTypedConstraint* getConstraintByName(const char* name); + const char* getNameForPointer(const void* ptr) const; + + ///those virtuals are called by load and can be overridden by the user + + virtual void setDynamicsWorldInfo(const btVector3& gravity, const btContactSolverInfo& solverInfo); + + //bodies + virtual btRigidBody* createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform, btCollisionShape* shape,const char* bodyName); + virtual btCollisionObject* createCollisionObject( const btTransform& startTransform, btCollisionShape* shape,const char* bodyName); + + ///shapes + + virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal,btScalar planeConstant); + virtual btCollisionShape* createBoxShape(const btVector3& halfExtents); + virtual btCollisionShape* createSphereShape(btScalar radius); + virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height); + virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height); + virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height); + + virtual btCollisionShape* createCylinderShapeX(btScalar radius,btScalar height); + virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height); + virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height); + virtual btCollisionShape* createConeShapeX(btScalar radius,btScalar height); + virtual btCollisionShape* createConeShapeY(btScalar radius,btScalar height); + virtual btCollisionShape* createConeShapeZ(btScalar radius,btScalar height); + virtual class btTriangleIndexVertexArray* createTriangleMeshContainer(); + virtual btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh); + virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh); + virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh); + virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData); + + virtual class btConvexHullShape* createConvexHullShape(); + virtual class btCompoundShape* createCompoundShape(); + virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScalingbtBvhTriangleMeshShape); + + virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres); + + virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData); + + ///acceleration and connectivity structures + virtual btOptimizedBvh* createOptimizedBvh(); + virtual btTriangleInfoMap* createTriangleInfoMap(); + + ///constraints + virtual btPoint2PointConstraint* createPoint2PointConstraint(btRigidBody& rbA,btRigidBody& rbB, const btVector3& pivotInA,const btVector3& pivotInB); + virtual btPoint2PointConstraint* createPoint2PointConstraint(btRigidBody& rbA,const btVector3& pivotInA); + virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA=false); + virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,const btTransform& rbAFrame, bool useReferenceFrameA=false); + virtual btConeTwistConstraint* createConeTwistConstraint(btRigidBody& rbA,btRigidBody& rbB,const btTransform& rbAFrame, const btTransform& rbBFrame); + virtual btConeTwistConstraint* createConeTwistConstraint(btRigidBody& rbA,const btTransform& rbAFrame); + virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA); + virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB); + virtual btGeneric6DofSpringConstraint* createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA); + virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA); + virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA); + virtual btGearConstraint* createGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio); + + + + +}; + + +#endif //BT_WORLD_IMPORTER_H \ No newline at end of file diff --git a/Code/Physics/Bullet Source/BulletWorldImporter/premake4.lua b/Code/Physics/Bullet Source/BulletWorldImporter/premake4.lua new file mode 100644 index 00000000..d847c7a9 --- /dev/null +++ b/Code/Physics/Bullet Source/BulletWorldImporter/premake4.lua @@ -0,0 +1,13 @@ + project "BulletWorldImporter" + + kind "StaticLib" + targetdir "../../lib" + includedirs { + "../BulletFileLoader", + "../../../src" + } + + files { + "**.cpp", + "**.h" + } \ No newline at end of file diff --git a/Code/Physics/GamePhysics/GamePhysics.vcxproj b/Code/Physics/GamePhysics/GamePhysics.vcxproj index a368bedf..2c48611a 100644 --- a/Code/Physics/GamePhysics/GamePhysics.vcxproj +++ b/Code/Physics/GamePhysics/GamePhysics.vcxproj @@ -97,7 +97,7 @@ true - $(SolutionDir)Physics/lib/debug/BulletCollision_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debug.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debug.lib;%(AdditionalDependencies) + $(SolutionDir)Physics/lib/debug/BulletCollision_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debug.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletFileLoader_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletWorldImporter_Debug.lib;%(AdditionalDependencies) @@ -112,7 +112,7 @@ true - $(SolutionDir)Physics/lib/debug/BulletCollision_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debugx64.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debugx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)Physics/lib/debug/BulletCollision_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debugx64.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletWorldImporter_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletFileLoader_Debugx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -131,7 +131,7 @@ true - $(SolutionDir)Physics/lib/release/BulletCollision.lib;$(SolutionDir)Physics/lib/release/BulletDynamics.lib;$(SolutionDir)Physics/lib/release/LinearMath.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)Physics/lib/release/BulletCollision.lib;$(SolutionDir)Physics/lib/release/BulletDynamics.lib;$(SolutionDir)Physics/lib/release/LinearMath.lib;$(SolutionDir)Physics/lib/release/BulletFileLoader.lib;$(SolutionDir)Physics/lib/release/BulletWorldImporter.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -150,7 +150,7 @@ true - $(SolutionDir)Physics/lib/release/BulletCollisionx64.lib;$(SolutionDir)Physics/lib/release/BulletDynamicsx64.lib;$(SolutionDir)Physics/lib/release/LinearMathx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)Physics/lib/release/BulletCollisionx64.lib;$(SolutionDir)Physics/lib/release/BulletDynamicsx64.lib;$(SolutionDir)Physics/lib/release/LinearMathx64.lib;$(SolutionDir)Physics/lib/release/BulletWorldImporterx64.lib;$(SolutionDir)Physics/lib/release/BulletFileLoaderx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) diff --git a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index 9cd87d1d..f2f97280 100644 --- a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -1,6 +1,9 @@ #include "PhysicsAPI_Impl.h" #include "OysterPhysics3D.h" #include "SimpleRigidBody.h" +#include + +#include using namespace ::Oyster; using namespace ::Oyster::Physics; @@ -92,8 +95,8 @@ ICustomBody* API_Impl::AddCollisionSphere(float radius, ::Oyster::Math::Float4 r state.centerPos = position; state.reach = Float3(radius, radius, radius); - state.dynamicFrictionCoeff = 0.5f; - state.staticFrictionCoeff = 0.5f; + state.dynamicFrictionCoeff = dynamicFriction; + state.staticFrictionCoeff = staticFriction; state.quaternion = Quaternion(Float3(rotation.xyz), rotation.w); state.mass = mass; @@ -131,8 +134,8 @@ ICustomBody* API_Impl::AddCollisionBox(Float3 halfSize, ::Oyster::Math::Float4 r state.centerPos = position; state.reach = halfSize; - state.dynamicFrictionCoeff = 0.5f; - state.staticFrictionCoeff = 0.5f; + state.dynamicFrictionCoeff = dynamicFriction; + state.staticFrictionCoeff = staticFriction; state.quaternion = Quaternion(Float3(rotation.xyz), rotation.w); state.mass = mass; @@ -170,8 +173,8 @@ ICustomBody* API_Impl::AddCollisionCylinder(::Oyster::Math::Float3 halfSize, ::O state.centerPos = position; state.reach = halfSize; - state.dynamicFrictionCoeff = 0.5f; - state.staticFrictionCoeff = 0.5f; + state.dynamicFrictionCoeff = dynamicFriction; + state.staticFrictionCoeff = staticFriction; state.quaternion = Quaternion(Float3(rotation.xyz), rotation.w); state.mass = mass; @@ -211,8 +214,55 @@ ICustomBody* API_Impl::AddCharacter(::Oyster::Math::Float height, ::Oyster::Math state.centerPos = position; state.reach = Float3(radius, height, radius); - state.dynamicFrictionCoeff = 0.5f; - state.staticFrictionCoeff = 0.5f; + state.dynamicFrictionCoeff = dynamicFriction; + state.staticFrictionCoeff = staticFriction; + state.quaternion = Quaternion(Float3(rotation.xyz), rotation.w); + state.mass = mass; + + body->SetState(state); + + return body; +} + +ICustomBody* API_Impl::AddTriangleMesh(const std::wstring fileName, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) +{ + SimpleRigidBody* body = new SimpleRigidBody; + SimpleRigidBody::State state; + + btBulletWorldImporter bulletFile; + + typedef std::codecvt_utf8 convert_typeX; + std::wstring_convert converterX; + + std::string bulletPath = converterX.to_bytes(fileName); + + // Add collision shape + bulletFile.loadFile(bulletPath.c_str()); + btCollisionShape* collisionShape = bulletFile.getCollisionShapeByIndex(0); + body->SetCollisionShape(collisionShape); + + // Add motion state + btDefaultMotionState* motionState = new btDefaultMotionState(btTransform(btQuaternion(rotation.x, rotation.y, rotation.z, rotation.w),btVector3(position.x, position.y, position.z))); + body->SetMotionState(motionState); + + // Add rigid body + btVector3 fallInertia(0, 0, 0); + collisionShape->calculateLocalInertia(mass, fallInertia); + btRigidBody::btRigidBodyConstructionInfo rigidBodyCI(mass, motionState, collisionShape, fallInertia); + btRigidBody* rigidBody = new btRigidBody(rigidBodyCI); + rigidBody->setFriction(staticFriction); + rigidBody->setRestitution(restitution); + rigidBody->setUserPointer(body); + body->SetRigidBody(rigidBody); + + // Add rigid body to world + this->dynamicsWorld->addRigidBody(rigidBody); + this->customBodies.push_back(body); + + state.centerPos = position; + state.reach = Float3(0, 0, 0); + state.dynamicFrictionCoeff = dynamicFriction; + state.staticFrictionCoeff = staticFriction; state.quaternion = Quaternion(Float3(rotation.xyz), rotation.w); state.mass = mass; diff --git a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.h b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.h index 002cb039..4f30110b 100644 --- a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.h +++ b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.h @@ -66,6 +66,8 @@ namespace Oyster ICustomBody* AddCharacter(::Oyster::Math::Float height, ::Oyster::Math::Float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction); + ICustomBody* AddTriangleMesh(const std::wstring fileName, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction); + void SetTimeStep(float timeStep); void UpdateWorld(); diff --git a/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp index f7cf6cce..ef003d7f 100644 --- a/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -300,11 +300,13 @@ Float4x4 SimpleRigidBody::GetView( const ::Oyster::Math::Float3 &offset ) const Float3 SimpleRigidBody::GetGravity() const { - return this->rigidBody->getGravity(); + btVector3 gravity = this->rigidBody->getGravity(); + return Float3(gravity.x(), gravity.y(), gravity.z()); } Float3 SimpleRigidBody::GetLinearVelocity() const { - return this->rigidBody->getLinearVelocity(); + btVector3 linearVelocity = this->rigidBody->getLinearVelocity(); + return Float3(linearVelocity.x(), linearVelocity.y(), linearVelocity.z()); } diff --git a/Code/Physics/GamePhysics/PhysicsAPI.h b/Code/Physics/GamePhysics/PhysicsAPI.h index 9bbde6e2..72d4a8c6 100644 --- a/Code/Physics/GamePhysics/PhysicsAPI.h +++ b/Code/Physics/GamePhysics/PhysicsAPI.h @@ -89,6 +89,8 @@ namespace Oyster virtual ICustomBody* AddCharacter(::Oyster::Math::Float height, ::Oyster::Math::Float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) = 0; + virtual ICustomBody* AddTriangleMesh(const std::wstring fileName, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) = 0; + virtual void SetTimeStep(float timeStep) = 0; virtual void UpdateWorld() = 0; From ef32e2f5acec86d21741a4e43269af8f04357b1e Mon Sep 17 00:00:00 2001 From: Robin Engman Date: Tue, 18 Feb 2014 10:39:46 +0100 Subject: [PATCH 12/36] Added new lib files for bullet --- .../lib/Debug/BulletFileLoader_Debug.lib | Bin 0 -> 444510 bytes .../lib/Debug/BulletFileLoader_Debugx64.lib | Bin 0 -> 614654 bytes .../lib/Debug/BulletWorldImporter_Debug.lib | Bin 0 -> 1036344 bytes .../Debug/BulletWorldImporter_Debugx64.lib | Bin 0 -> 1458764 bytes Code/Physics/lib/Release/BulletFileLoader.lib | Bin 0 -> 192098 bytes .../lib/Release/BulletFileLoaderx64.lib | Bin 0 -> 323882 bytes .../lib/Release/BulletWorldImporter.lib | Bin 0 -> 486966 bytes .../lib/Release/BulletWorldImporterx64.lib | Bin 0 -> 740576 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Code/Physics/lib/Debug/BulletFileLoader_Debug.lib create mode 100644 Code/Physics/lib/Debug/BulletFileLoader_Debugx64.lib create mode 100644 Code/Physics/lib/Debug/BulletWorldImporter_Debug.lib create mode 100644 Code/Physics/lib/Debug/BulletWorldImporter_Debugx64.lib create mode 100644 Code/Physics/lib/Release/BulletFileLoader.lib create mode 100644 Code/Physics/lib/Release/BulletFileLoaderx64.lib create mode 100644 Code/Physics/lib/Release/BulletWorldImporter.lib create mode 100644 Code/Physics/lib/Release/BulletWorldImporterx64.lib diff --git a/Code/Physics/lib/Debug/BulletFileLoader_Debug.lib b/Code/Physics/lib/Debug/BulletFileLoader_Debug.lib new file mode 100644 index 0000000000000000000000000000000000000000..fa5abf6e07aab9058f019655119ab6437d4ecb01 GIT binary patch literal 444510 zcmeEv31D1R)&C6*Axr{IAV6ge5Oye8N_W~MO-c(*NtcwxLdY_0(xypBCS8DHAb^BW zL_kmkEt~9%iY$WCLZN^~3syu$Kg24}$XI-#`C2q`^@bZEds*5iNXuq`a%8B^;UD>?k9nk^huZT|a-4 z@`?l$BA|N6ptGqu(jkSaE+O*QL&dzX0Wa254CYDSr zu9#CaV$`UK#bV(Ti|e(ePaIPmO;B33rju8AgHt1fZ&)wEDqM25hcPRbxM)8q&hnB zSKNZW-N1i61n&OgDt@psJJOt{@#3Nd>pOYl>sJLUf zM)8K7Z&95+9Xb}63Qg3nVoqwyK9i^S5ok)edPpqA^ikQwBy6Z_uWM+IEc0uQ>~+g4 zr*H_7h*V1^d17C&B+J56Cdnsu3dBy;60Ym;6NS_d4owRqn9{#;R{FN~Aem1suRNPh zL7QYl0Iis#q2?DVDv;i{XjY!Sej*WXPlZ@qy&@Bo)j14-(V9xeV8Nj=tUC!`m+5e{ z=(Myz6D5HhqmBiMj9e2Z^O3EKnGY4kn<>orXx8FD|-(Ss+MrL!I#47@@$i*M zlBwMSk!0ZuyXsmxF)WNuJIgC;r(}?4TqO%e@mjOy7p3M>-Kj z@WPmWwrgV+NF zoshkk1Px=aC`u$ziJfjiuW-0*gRQ?K3|m_qGx>4$HL`vrgZu=f+67Y*TB`|(1BICk z3oof?fhCtX>S0ARR;qwmwj~U#lTmb?2}sQhAc#z4mK34Cypl-nEvuvw#>mN}SX|fA zMU$!Jnnc^Y(wf@o%`K&!k;c-}nxbOgk5Cj(EmspQ4(t!+cht4iHng>NM(SE4rM1%w z3JVQo?ev7CSkKn^7Hiri9nDxe@bfoQu&7cyovPDx71OcUXH>&29Bv^RQly z1avx8&8?*{fpf~BfBY}hc<;4#$M895rQJg<(Sc-e!l+t;Qp7jqc&<(wj{@n|ktkKP zG;Z=#hbYzpx0b6{;siyM^N= zi^5Y|=e60&G6_9mgcTOtW3*&e+E1(3P2KEbL9@{X>(gQrpzP7OnImE&Wt}&81PJEQ z&5=4^T0eo7Vf8$2$4l3(K5|+(GAG>8+1%DjA0&%QLF*}|x8iW9A&AZ+M=fVPkV=r! zWrI3NW7nc~T?b5KVzj}rK{YB!Wfa@9nSKs)xxV1jCB_bb>7_Zv@y*At{w!*oF1&e9 zYp%DaHts6Jp75WgzywI|kFwL89$r%Fw#q4!4b>#5tChx2MROy7djWco3Ko?u;YH!r z2$^_ruvoAZhSH@4%u&Fsx@%vE)fhNkA$`7D)g ziZMdstcm3*uRw7s(2*N4Ob;)OnEeztJr?;K$|){ITHQ*J*YvJM6dkG%)9B5}C1_@b z29wML&XIAwaVg0rbT$_&tJbbXdMU26w6tVOnVQ&!?W36LqS@3=*OMAfrly4J8aacG zA*q4{ZHlR!Vz<_{xM-Lk#3pjmb1rKODu$IPqoQ!i6wyO_M|jo}EHT7p$fnE;J5U-w zHrmQ6Vmz9(dQ1)4S{8>*i}A2Edj{bo(@oJ;3>KCx(r%{37@+B5#pF=c+_{Jr=#g3~ z5koEYnHg^Ag0scUD7NOvQcF>mYdY)ZY4PxYKpY*6noXAl3Yr73J4|9E?$PNv62_~@ zDAFZ=QEDg1{o0|FmjrrB?qwX4jct(4v~a6;&2_aw;AbA%7^OH}?TuK7KC`7Uz$B zs|Fv;i5AN&2f#lBr*KXPWULlE{AUlsiFYuSM_rRj6;sh9QaEerCbxR88tKR^@i|B7 zUh@tuu^6J*zQwM(u+`+0hYU&!V>4rf@d^|D2KP>R`q9Kn-H$3*>i((xr0$o(N9vk9 z38}}>Ie9syUgRxxzxjhDAdbfqPBr4|TZZ9f3|6%1mz#?imd7(eE^IIhXT7!M(s%13 z7z2b0^qnm^DNW{1l+Ia?GxWgGXAKp0$NnujVi_(aNvxHTJa134O(l7Z=2EGZQ)upV zzPqIkcTZd6;SxQl)&loU1=6Uu*8_2#a)u1ZgVTBl$jQqiTJuisAd1UsV;RRt)-d%w zF_NhB;V|A|;S}5)86u4Gi%q=7VTm>|rFYfM zL@96`CBELtq;gf-N)m94h3?&)2hr{+_{fWcnnFP56GZP>dn-4u$b|gdEy$GIEvy85 zVx?piCrxl}=6BuWCZsN+PUB$IiFDu#_md@`kRNzKJFR@6yU&MChb zUd{;rayeZy&CJ-Yw@97D6k-bGUcyQ#d8}YkNE#ytN4n0S123j-GNej);3XAmUqK|5 zm&2$ znTc8abyY{E7&zn>H(aLy`z;+i=7c(FOifL?_=7qgS)*h1%{ZQcGaD9Mr*)r%-sHWO&J`!n%nUEau1lEK z8kd{BVjoCkX8YhJ<%wehucp-k3eRjDm8xlOEOJRxD&u|7Dc;`bYd!64zBdP_ZOM!; zdWb~plLi;Gs_t;uL1ZzWJ&4fPl~G^834OeIP$FmbqdkvK;Wj-k_nL)K#!p(*J{ip{ z-uOT_2ZtmqxyeFv*qgiz+R~=saU?8Wx0nIM>((4r@nGPrn>az2YE4p{$m^WlREKq5 zS5vH=9<54yTStV4_oN|DYFmUY1~ix$k<(kDG3bL62@fy9ZlpeXw3U$Du7DO-LUL_x z!r#od6DILAJWJ&9Th*|}Bv{7C$EvYQv$T|itencU_{8AAB*B?1BXKRj1f;h3k|FjL zTylv$M3hXzn94`bg$3=zNUh9FH;B-!AbTzyl*m;eE1L)|Gw9G8z1)?xw=vJ0H?K1s zDb>3jHIZhX2{xOJv&_q!+msXJO=!X1WRuwh`*Ghw zp?%*%x>Bm?GNr0NO;b-?nyw!Cc7__6rqpg~2tH}}%MW4e6OUsIY5CWJ(_+&4r6Dyb z<*!hYhn1@{PWTfO`!AYSQb~EO97!AHW>L6tR=FAPj*~K4JS;hQ(e)qatg}c^WWYKT z;y+4PB+L?8RDwy@rM4&~l+sW-?y_5S7KNn)@*;J#G?J5WAU3{+q7^Bb@FA7ZO1=`8 z4qQ6^Ngm`wDoLH{89vAKJ$`2^x-^jFQ9m^8=tMb)ADmFKgg)nAl1uL4m6J^v(#QxSm1`!5gk3=iY@HV>Z%P{BXDn?Yia5-n+rI0(Wbhyjr(nN z$F^~QDrXz_r}FXP4mIO+xL z6EGT;QesEWj>JB12>f5WsK+$~z_A5$K~K>84*$L1$Loa;++Fm!z4ixQH2FhO@b<|Q z>p@N`Q)%bxbt)^G7mOx4;pT~ll?2Ec2MLc`W0YD8n?Vb9Zs$0w-S&Q`Wpwx>U-wIFs6;zNq;)N7b=qjM}{^ zoNvXQ3pV1Cl0C8~?lDXaz_^pm z&(pG#PwX=5WD|PYbn=Ov2AyImW6gG|!8qC~)BnT=Tg4E}fvmuTtXA7dhNn+&tlL)N z^xpbUri^jpJ}fIH&d*!($)$`@dkRS`om)u;>0~cEI&+p*kLiL=^-4EqsQCq(#liIK z=4|?er-lPOL6nQ1r6eeer-@ixy&@Cxb9s#@uh@tLd^}Cb;^h^Yke}1QqKq8af~#mt}+Ce zXrhvNSYixwkN9Lt?s9W3mT?A~sFWUd8N<>eKABQFr@}6NvF4k&e41XHuook-ZC{PY zPaAZX;GL_JSY{1L5{oxA?mRJX-J4>XpEP$rD|DPc_nN>v>*Hl@DJ74!tQ3-ZSx`#J z9R`znI?MOj((W9rgZjook~%JL8%UDW>}*luB&h?n3pe{qYB^NRZjxgxBHl^_boiW`FNTS zhW%Wqid!A?<{keghO2|+WC{~&&!hE$H>{d%F_YTaA+iGvOsWmRS4dWYoDxrtrH534 zm__dma@_=?MT{|;zWs>roCLm5@>#x=^0~f;iRTzx?|4}6#5kfXFW?a+XYjSktk^^^ z(?oTMgU0ULQm_l#kKd);mLq4`zdpeH)nW zc`Q{~7aiO2|9$ZYE^Z(%9tEdONbAOq|eTpqMC;uTBytbPo@cOrg!oB?|W|Qt18uZ@v`f|2|ow zR>$?$*jAU|>g)trc`Dv36E8yepQK)IOYxRIbl)BaW_e4QUgXl(?4Dzm)D- zPxY<8z}o~9zU0O|CT%^t=$$~>1%!1bevTNx()0ac~7S+Li37({U?;V zYo=rAz>Q9Zl~)rqD)ov=j-}Im$FzIdJ5GU#@#ry31P3Plz3VdQdVOO(+9@P><&qOj z%YP&w)gyuAiBl*<0^?1l9$r?Mbj{p0mvlle>q;T9+r*NoXw1AjCa(m)8$d0aSFfRH z=N+i=Q?vhGm1=(H*13pn)?zq}3wj|}nu+xuZh%r`TRSO2-vP6=b01V7@1~JNzVXc> ziA3H_BB_Ki%^~>|mV32Qc)j|}SCL(2&WROtwX1KkWp9z_UFt-a-452v*78QSzP-dl z7&ruHe#au&n{%z7+xXA^!49n*_xhCo)xY`>yx%w+J(=_OJ^FuFaOmWd^JAW(k}<`j zib_TmkBmX*7n-j{r<`J-3qsLJ!n8Kt>pi@&xnpicxV~%tT;~j8cw7Af6-3JwyM#oL zM?xAcVoen~*($JAZl8J;6&8*hiMoy%IdXJ~roA9EE$v11ufvASI_%gq71<3h|Kl0n z*nwXNUmTWiO1%K!?L)0^CJg0(j`c5?WyP#NRjF?urc~Q`f_WQ3smdugbh9nGZUB4C zv%X2F={j(`bX^ob3-=CuIgYNhba*V8%0!Z1&yS`fRH_PB4R`V5-3ITv>2eB7-E_!S z{V9$v$CK_oFS-cUJXr|yEFP-VCeWR~L=Z0`$XC@D3@2T|Qj1J=LjE~lQmW@NL6tb^ zY$~Pp1AJMJ13|hR@N?;7JMcGy?z$_4c6S7&InalzeB`&v&+I+Qj@0TA|cL zeE9hBqx@!p=Hlyw&QBj~Zx0(9q4X}_Rz&^)boYEEnBOu){}MFS*9#r_d)2oPGx;5VgHm_l!zYN}-#~NZO+pvMZ#if_GIW0YMxcC?zoyhhHz($|0W?*& z2%R6l3h=ufG{66PVt(Vkq15B}@bTj}9{kd8h0MMwbV2pK6*T+aCUk!MSl-!dHwmcHdZzQ4* zeN?I0`0(-LM}0JbX6a)>=T|=RdjK@=7&ipV2C zx6e~T<);twt1vV{{I(%-F6gSCPR#FeLleZ0{_j@Med~vb`K>oJLHu?gauet_K9iW= z{?A&RB=nLW>pL8DNBk(5-$X>u2F;BQIxl_-^?eaEFa9_&zmGvP^0_FT7eC$JK(lmJ zl+LR^x*X9Dfab*2Lg#0HBT&9l&_te3%G&|l*%y0NFF>l0&j~_qkw+}RTy(M&h z_DuQx0yKyIO6dIfQNP8YDgSjaztM<}7#gAU9zSz_`4H$f{3bEKjJGXL5_OiaG+7il z9zXxmi0ChZ=DEFuj`@1&gZy^iJ5Ak)51$}@e*n#C>^SiR@mm3!gK~rUEk*P~(EMSa z#QcuiH%&c>4>PnH$gLm4H=JLeL1|D3Yx>dAat|? zFZ)}E=oz3n-NkhLc>L^-{2n$mnh<}y_|YxD2)Z8} zl9=Cnh9-!g0-K$n+j(eWenp1~O%Ol0NHrC7W%-HubsCx=eyndF=q^6o#jkT|%nls= z@xzA3;-_{iRKqn{bc5?J+?@-VTkEJv9h|*CGqd`+<=-gRTZN7bZb>C1~z&)4A$#5cvH7 zH0uprP(6MPnm@2g7{ zpNlR(KmX*(WmBh3om@3_R#n;TNmIriQCl@@Qth0|nWq+wDl9z0BYx`a%9&-e&zxCX zQCVJdTJ5yTIhE5+E%u^lyxj`QbK#GdW$z?Uu zW>1@1KK6)3or@dVJ0guPbk(dmlV;AYaAD7!h7$l)m9vh>rwBg4=OKJrRa!0rHEHbJ ziaA9iMva;)2My+yH@DVxG>1FqRxXWn)OF6C74B%RYr!!oL%=f!a%v$C5p;}UtQw!2 zmX9I5Vz%=zFtx&}=7x^8&bE1x{9|Vxmw#qEbk5d%nDGJv$j14vsmfV72T)4ed{ zDe5%KrnOa6xZ5lJ% zGTN&Ba0bD)%%#2pgPn~w$0<+^Lav<5LFjISM<5ML$87kx+u%j?5zeNRWE+&9N1EVF znL;DfsnH4tmVVR#(~lfr`cnp&e#8LNmkcm{@c`2o4KO|J`vZKwhmX5G(r(!v_dxi= z&#FBhVA^9l+VG zjb4XzT%xcZw$W2nw4b~VZPa({9QZp0fy3XRlm!Wfzkz8J41WXDCK&z(rcE&X4NRM0 z_#2ou!SFXQZGz!%VA=%3-@vp9hQEPnt#Iez%C zz3+{X-{}u;#K-LqnT9m^`1~l5T;A;}a2QjY&46{zv1RRsY)&U*@tara2mE7_LfG zfBg!HwkKv|Jyv%3ex*#PSn>T~3wx<-+k6n4(pOH#wmSvrIj9?EIuMF%Uh~qfc5^LB zCo;>*-G=nx9K^Ka=zr9bcSBvLOX+h#MeARTDPL2V@26m`CM)+Xpx7scTN|6}*ezwi zNXFzANg{OzW{dnzqvG?p`F;Qx^Z7Aqt?AA8W^m{CQuF;jLw}z6{=Gb&O|a*hn}m!0 zOTEw*4#c;&4Srsl>ZZ=-BdkD(d1W{2vk)QLlWIYTcB2*{ya-_%!fu2YB3yy61L0Q? zMiAbHa52J_2$v#!7~wL6k0QJn;j;)YMfeKBFClyrVK>4*AiNx58p?JB!hD37*LIIZ zcs0Umgx4UPiSSy4D2rNw5M@wbL5Mun^$6WI{4nqbgSXYP*oKcZ-zn}5__%GDX-LEH zxkNUsFD8gv6hLb0LE}x?P-9y9{xBf62^tW7Si8QhGhEfy7*-qw(ISa&X^uo%!j+bJ zotaA?a34O_!@5xKtPXX==LE=$^_+t67=))I#5#k*Iz#sv2&W+oBdkK$gK#>+l?b5= z?MtDH?nm$)uLpI%gm5;(cM#SfyBRfQ|M?pT5x?w+rn@w z7L=g`(VXSG@s_6|<=dd#2mXb9pnk1PQTOYCbx=-$ThZOY2BZ7VaCl*iKe`CAp*-=> zYppZsn;UJ%vlJs$K6DgxBu_ZLi{qgEtOOtHp-gE%ML^tS@G!h?%6l0?jwLQdi1jDc zjsJ5HUXBpsXw`#|cJyV0z^Q8xUXQR3A#L$Ggm)nXuKO{BHz0fw;mrttj__85n-P8! zA?tNJ!c3H5CBnTC-ifdfA$WAd_S8KH;mf#I-`$Q7HrfpzqP~mps|df3@P33(Ap9P} zrx3o15aXoopCkMc!p#U*A>4-Wd4$=!VapNWehAkhJPF~e2uC7Zhj2PVoWSco3*qYs z+Yr8m@Ir*YMtC*Cw-G*!@OKCwMfeWFmk@45_%nomLbwItdk8;42*2H(0lEJfVKzd@ zpnGqGTM+Jx@UIBn?S}0vUq$`h$}Ai+RQ!Qg8M9;|zQWaRnC2M7GyHL)cBA`j8ZpN! z%*lEz4~y>uZZBsv1wCnqC9pAN~)6TzckPIjT z+BsUGy4K)7L5(P%9SBcG_)ml*5&jF|sR(f@MfaP-;K!!m`+*2&AjFP$_t^-sQ{BB7 z;UNfN%L+Tg+U~If+kH2_AA#^egxHPM{bB*azu-G|<>K^vG|DytacH>uxi>r3FT&@> z`9-E-J7u^!k$y2ImHXVZf|-@|45nY)&nTEHYPdJHt0BTmKeby!h13uj6P+NOQ&uij z0av3Z^c+mF>Lh4uX{6)iz;2i!X<)xdYq1AhE#XDw%Oc@Ujg7Y1Dl@lgUu;TNS5<&RX6_mMQaf|@?5X8-o#9C>b)B91no5)|Gj}bDVsGbg=M`no z%-tPjx3Rj9g$=P33QD95qTYz?Uib@j;cTzY=+EcGH&hcRQrPAtN@fp+FCm! z`NyAFG;)F}0PXR}qP9~M#0_a|1&8I*k!fuWb&<9Xbu6gX??;a2mq^D81f87dWH~_> zxfXK4%0OL9xEYPKR@y6iuFTxSG>^Da2{YVMp^H=kLM=d#%xp0^g_wW*1a&eJtwg?^ zk;buOyRf~#td_gl6w3IBtrRR}T}MaVvf9@0l3F;g`H?1V z3lCZeV{#+Q_pO*{?G6F@hZb5VaMWo6*EDjUw4!6H5ktq4-Rw zggYBLn%mjFDcLn3E2xz_y{(7>m>y2Z=$^T@c!X|cCIF&?%p#GuAy5Oo2TBmp;8^UdiTQu66KdXAaS# zh_}||I0?)z(9C1)h9fQ8-9&AYdKr^QFU5sg4|#r#HrkMM5%veq$>8bg3l#g3kGw5W zOWQPij`MVvV~r^NIvuu{F1y>)>YU@zV#IMsqp>VB>i(=jp6-^7*<;{oTRxr8JZ*s1 zKpFm!qo@);4cbzUb?OroJ(ZrxxV@;%WjO1h1DHH@S|yH%VZcXkP`e0|F%F+U(1q|& zs&%6}{Fs={65DK`blsxpb!v^v zxaW%~h#B|5z36cd6u1qaRaoc3kXPlTr8OP3;^KoBL+_?7#gv*XxD7f=7*mxruA{-)MdsJF(i zsX60{dG%TAf4Q=8W2mSIBA)=gyz){bU;!>W_pY%}IOfpeO&(T>pdX zH>$bqZ{Kv$cI=I6{Nc4H-8}rSKVSUU^CSP-`v+-PWBpX)fBoAh=e{v>#-sPooKTw4 z9L9p!CmP=wp7pD*<}N+@mq)#K@u!#k1&bNwyOaOs6CU_vdTvE=@l}W2)Uo6_$mbf3 z|JK1Lm*&*}>wvv(Y*S;q&xP}NL*rll#etRg{OOZlW_2t-_rRrBK>i12kdKk#p`(M?QP*tZv{R)A;XxKN9-JFTQsB^4!kX zXKuKGi!6JP&+y;hwe_l1BPRd8XXYzuUN zclSMb_vN*hG+)#E`*SDc+^y8P8vloVhTi{;r><}LV#duUocZmGpTgRZ#$UYZgTiaB znEmYg5B#I#wakSFVVzjxoAz$H^O&EU^xCyQx#XHVZ#Zf!)^qnH|CeTWUwG)Zi#Htc z=0}g6-QM&h_Ovzr2fN=Ky5q=MeII@Ix&OWATmO3)54$@gzxpTFVa>z;nL==BrQ z(U?Bg_@9(aI^fM`pZW4P%L_i(zij$txQ;4B{y+J1-Hyjzeg9_*I$!a@*0(kOlso_V{+!1rZCbVDyb*uA28k#64;r(EwndBDT7_MEN89|4x<&cSpfms2 zrK3k4Hy3Xvm{a?Un>)MeTJk$1U5(9c`9(#;3+FCwnA?m~^IeVMxtLUiJ0b(;(}33< z!t*)@&IptE=C(m#Q`a(ZCRl80=<4VQw>B*691MPoVO*As2Ej-hnz~vS4!o9_B^QY~ z(a;BCOnQZ4;01y$E$J|}JqTiQw&jNQ_GDUfXGg=_mgd%QUB{xjNE6%v-mu~FTOF5L zxT-ktN`{*T&ZBclJ62&L^M*IKwhUBvn6qL*XW(U8q-8X4KJWuA&GiH4(}LHPB7@+U z!i%tIK^YCaNK0c`4T6cot-x9bp_ZwYEUuZ@UFsk-5IJ-!(oQ6zxPov2c2Qk>KU165 z-d4W=>uGvvxSxzV^}5f%Ed~qI18v`QWCJfqbiI3kUByzgZ&>X>Yt=9~Y=q0e#j^}I zdJjS?T)Hs4tf48~FbJJ{7dA`kuz8f60VgpsZfvasuY%cy`32$n_WV;3G`HvT`-uD# z^3T@@;E9kgo$_TgVo%NQcf$OF;u6iYWMuwHn)AR}jTmiMf%yo{{FLHBV_pQ7Qc#;a z*7OIB{VA3hZ0;iq2aWmQ6>|`4Tx8XF;EFF9Of_3lm$e^EuW|5pTJA5fM7Ij?yI9BB zLv02037{;!-b5&*Pj>8qRhTSwJZS)hR0E(4jpNxeLLr{o&~K1t@w|qHLh3hw(ly=x z7$~F;!1o~&J+2!+&F@Hb84ZZuFxzmbgtC@2fhh!F~@J+QK~6Wp^@ zmVrWQ5}cfkNt3K)D)MW}uL|1W=B~bsH$8o&hvet|W&Uj_=P zF<8&pOXE&8P)IEW#Itx=>JkHm)RTa+H0~J#h15rYLK^ppfkNsOtl#XZabpY=QeOwe z8fB^53=~pt0+PD@+CU+d591NK0t1EA*?=}`X94;AbH4!%EEl!p}h92Z*N>v(#h*fghke z;b$Q51GKO3Gf+q!ixnK!C`+AappcpeNb0u0Kq0lprhD0@+X3j0S{f(vOq%9gXrPd) z2XwT?%`;F)eGAZ08h59GLh9Fm3N-F_1`4VDalqOnxqYTTm+3aK9gI!5F8!T}-JJ$$9)QDC5us+PJUTxNq3Fdu-hOHjbOBQWl;mAQV!MVH0kXmc|YP!3?oh zPFzS;0^&*CEH%|Y@N0lh)VQ+^1m6zm1dW?-ppbeB5V>TjXAKlmP1tOCU+4C?fwI(7 z1`4S(YrM4ODgGd6Cmjr)m>d&kCYv~k@B;sr3d5sV`uyoae5y za6y$o@LYgS(YO;06jGxAjnKGp1`4SU0g-c-`p7^bm5l?Ng5$*wgwSRHmFcuA4Frn- zRIYK)8VEfiph+6{mVuB5pbCxq$Uq@A@euTb=)SYmBm;%iS%A>cfcv6>LJA$Mx=8J} z-_Nf9V9bR7Ilt=BkIzmYnYL#$*m*3DS@+E(F*nc)?$Kp*ecz1!nG&ox7Znu_Z*Qzu zfBW!*CG|Kz+|kk2F*d)UuC=u-lHb-IZq>`z`A2o;&ui<*=Lv8uM}<`9!shmN-Zq0% znloz3rq7;wZe>Mn`J5@Wlg_ND%x~-p=SSM|<+X==oNz=pgL^B+s<}9UJ_m0SjKHlD zqwuXTg{78S-R+PSLU@$Dp4jN=re@%JRvfxn~hUfT%JRO0@O2rzZ36W?YbWe48y zs{@Z_NH6T-IT=`TpQhSC)2OMLPb4O1i)uLDA#BG#oOA$XE8dbk6(Qk8pkIbmVdToE z9EVaXXXnR-Sov*jThf}Z*MQ*`RQH!~LL47FX*GRY7VK;y*mwv3R`+bld1@V=-pY-= zm797ixAazS)iEV6R$J)w`QlE{zRa-!_XJ5_MJ_x3~9W2*gHXBU% zl)Mo+YeCK(1gmx8o;A#~R}=KXE#p<7CjNzl`mScG8HOx-fim&YDCTi`yC&FNvrE`Q zUpQ*MlUY`6YwX2%M5%Ln)*L);i_W$0kLSIxZe5&x%vf8wmG+_Q>17jrm6_G3w&r1( z1jM9;q*d^_H3^7(?d6s>eWa5UmCp0&s(Se2KOkXA%cwfzy-kME)m79DRZN3*SAl{k8JDhl@6z{m=om;#EjCYdpj?`r} zmhqZq7}LIoMJ-s`H(K-#3cj~$#|qtccQ`}>#~7uD#Y2BRTTYyF){GU)H$088t_l2wc~>;9Jfuogx<<+Jk6UJzlEVZ)5G|y$lh)?!NJ) zl2=Up>UW1QevXM>{SLnFzH#x>I_)cazErW-#$v-LM8Z*qO%};c>DvZ*%~+7OAe*JK z%AaG(-?we(6P0Yi+h+9DZ100|w)a&J+xdna-B-B{vD^D{`KSEgo$I49NMo@}H`vXG zA-kGP=@_g?OI9VTHt(*BHnZ=w>J?g$T1aP~TYG+A)sB+ajL1%Os3=oiuiXfQ$M=gc zYt;|mK;mGIk9qCeybw;+M<1=9j?yM?h364$_HsRo6Sr5DtGieC5?U}s*dT6bqw zSu#<^UhN(3pa80y_}5NsTb@Kl@zRw^#u{6Vta{%46h-L0p77erZTPE|+-#J=`utM^fk$p|odsk=Y#Hlo<=S55Fvmxx*H*4)>dThDjnQ_|&?_2X zm_wha`Si*+B6|Tj14HwnS8(ozFS9_>wfp;}AhC;WX)k>Ut#3U?W<#&N1oSIv-bP8* zqnTNySl6?Bor;{(SG94*imElb>?B%IxrRiSt$qyU(Ad5z__^3VIOITiUPS>!$N{oyjUs3fq=^evc5X=;UnsvQ3kFBVDOft4dyCA4I zYgz?3umlgSsCkGsec5Vzhzf#9XHK7Gvbb+W)qRqMJ@N$sMFs+9arcVKyCn;IAPj=p zRb|yCie!HA|x|@&!~zKYY^?YbpAPzT+PCg@knb z%AaE#;ycb+k<%xxsM@GYiKzl@9b;s2HSPfpbGG=S-l|O)n2A1L&o0!(kGEQ<3Tz*t=a7x!(vSZ)k zB|9yz5!xTEdzx7}{E;Q3zRF>cqY+MDRSu-0T|C^?ly;-+t$kH_dN8&XE!}~C`)T%W z3tv%vHE$1nEWaqHHrwiuYqEQ5HeezL zGhL^%T~W0GBawA%HMT2&cJTGG)wU~$6B5m9ghNVsYQ7N5KnG zs8R+NBIFlbGt@*tSUCgkH2nP?Smmj+0G+1k!hlw4+!7n=wV`j?(8D(LoDIEhLw~TL zzXMvW`3=F}Wg5b(;_81j#0yTic$A^e21G}Zrxw__c0gQi%HZWGyf6i^*VwTvJ?i(S|;i|iqZUZExdc=l!#9VN1*bukI1ox2*WnxGmxC3qIL_kt1Zjwo< z76an;M~1o;kd*3sfTRT6Lc2_t>W_fv8uQf0Hnb-;zt(8nA%L#X&~QL6X^01_pV!cA zKzC?po((OvAs)1r*xPLA5gS@%Lp*pbbiW7mj^_6fAgRZ}Xf(7GXdjT^P6s44ItLIJ z^fFWfpyi;;P>XE3YXON}9f>WpOLgo?fP~958=7ZB9e_C0$WWKqxL!b<@?@y50HVcb zsBhS@4*@zx%lW&2I4;an&jI?ohF-Dh-U7s}jtsRC5I09M)K);;63I}rGqK>RQ`7>I zmKO%pt#M0i+;TwD^0>t(b^Dqf`w*bt>J&c%B>Z@sTiV+@fP~)%Htu6U(gwK|DE#&Y zBq@#pB>cVvh+7jG>Iy(o%j*G&Bv%6BW=4j32oSeAGSq=k3$7u6G{yn?m4?m+#Et1Z z^({a*YiKo~w>9)8per@B1<)@w^e-Ei3l%(}aYq8;1u1!|0?<7g3fs_CHgvBIaeGkc z-nXF;#=n9)!G=ZvI!tSNEFjTz1t6*A96(aOWqN9TWJ)zSM2PF0~8W6W)GSsPnqsHgHZ8HgvWP z&9kA14P6dMI_^F|(mi|&kaSgd0UD!?{ysqefc@kt&Y$1W(2oI0C%w*wer-dvM2Y># zhSHHvaQoO$z6})tl6*%38mIFe2T1ar1W59o0Z6#i+R!2!V)K{SUK_%lHwH)dF0tRY zAr5OK-&X*gs`LFRAj$VlK$0(8qNJq*5{Rds1lrq%IK&bhJ92?W+t6einhi)~9|j~P z;4pO}J{hVFf29PNNI4c}IS0ai3{8UL^#XjXhs%P*TMw@kgd5bj4-nphPrd7kEv6w2 zw|i&ukABkZSHz?5>_*?4=I;)~U1<`H#sx5b7l!6{M=uP$7PcJy@qrJKZ@y%%|FT@w z5HtS6=;W!uV1*u^i)ec&8aAOUY^n+r;>BhL_qL52H1RzRmRAIbkFO=m<0U?yw`}q|f!T?2{22WZ7Rs`~@!6FbysHaD0yQux#gxzvd-&hax;; zlN9@W53v`b4A#SPtwiI-^v!O)m%_3+&+o>6&Jiy|NK0Q0*@zkli5durr3;RhF1UWE zf%+3Q+@_&{sR6Hks>=h^u(wAGaSGbU=A8{B8S*3*wQr1~K1A93tEQEZov4YBsEJTW zZ3kDuvE2yHrKbM-bFTW7yTtAE=e%f4p6JiVST`v+F8WAPTtjmb`D=P#)Y|sfWyXrX z2Be6Gkcfv64laROaL*bDhxp>UyQ<9IOzHNp?&#$nI6))cauM#1?@Ndq>k<^x&^_R2 zmwMhID1CPe?jfKr;N=Cpk|4PbZ4tQW4vlvMW|A!=){f-%eU8ThX+6yUYPbRX2Y-2% zLtu0RbO&tyoVJMI2#Mebh14n&o2AwmC{A$3`^LN87r`M<=jrco3&7QqCcwBG#%~6$ z&LvT%p+s4OQaQBZ+Qt&R1>u$*`m)qf90SU9LR~m_5WhBn=m`I$E zNSu&3T*1-d3eIJ!z7oHC5G2l~(i0%@q5bx)-YW3(#YyTU#<>neBX`&uAtV|hB)(N} z^sRz}M*1qVy@$tal6UB17-WFPWRugV-5huZ0?_+u)mUX>rurLm` z$}){d$a0-(Y`4dj6d{omA@LT1TLXH*(RSxV&wKP>8FBd`*eUrgD4OuGw}h-C2>8Mf$Zt1et$4&wy&S)ecT$>IDbsC^5 zO;=^pon_Ot*$~zDcYF%)v7TiBi06k7SI&mw8^2T4kKl8LOVvy>6dzXp2-^svLwTqB z!b`mvlvq~q#q;7Cg_W^V&MD6xI0>$Mh-}kCa3bCcr#U9~a6o*li?7d+uljrRlGjp$ zWx(>%tzlUlM^EK>OsQ_x0ZQyHMhF#k&qersgsj)&2x)h`Y+BqLAu$y~A@!1p&Eh4} znhvj>*f>t_g>I{j+h*hZOzHtpBxh0&`cwX=n^gO*F{!LwZBqBcWN1=QqBbe0NSo9{ z2&vSE5z?ftw@r$Wm=qx~DZ$aC1V@t+98F4aG%3N+qy*<@QZVo&O=_2UsTWYWUF)S- z$>{-J>cj*lWe>7ac2xF=sy~iOcVeX|yY&pjQ*m)lJQX1^D?%al3fK$oH3NmzuWa0J zZ5)kB=r|dZw4Yn>!{&k@&Pn%5hUwsbCk4xW;Mve`2S3^TC^+8>gT)GtdbqdKW3X1 zAu%gLVpf8qSqbiK17)dqY#hx>=xA0#N3)8qH&}}aIEvcyP8v^(@30SfyElxm>PxBr z5k<(;iw3e!T>_l{3MN)X6ldYqOx(RDyaI7&yZi^!a8>Xme4cVB+PaF_@lzFJ$6g@! zH03vjabYB1Hf;>c72a(f$Hc7%fT4Mu>jCcHU*|k(i!FRYB78!6eYa;z=Gw~bJdGTc zBv)=CA;|G{oJro!cNDjS9B1dZW1rY(!F&`5GVyT==K%Bl1B5r?Q{@s4(~zc!ammg+ z^u2DgaLvD#2(yfToD#7o9{lkfl1K32&jiT&*oXL5=-|LIaSepaVFd<{b)#;Ua|%M1 zbt*y%_8D8Sgha4}qz@Jx`(VMrT0bjc-;GSq4-htQFpwwJ@p!7zw}<1N(jSQMZ?%O_ zNQ6%)#NQa>Zw~>t$v~f}rGE>Vy4`@&(qBwg_>NI(s$#bXsh(n&jr;yu{W@FlghcR! zaA62)E;y<{aG#;o-;7MF1FW96b;#pm^^Wmdssgu%Z@WO?57+`HBmyTSJ4k|Kmnpc| zP7yDwRc5Y!XSZrL1%)>yW7p0z@dGn(W?+_wyXk{EzmpN0jt@O3A9v?Rt3TZ(e5PUN z$Bju|(IQV&_+{2LrsJ{tEyq^0-0_y1MX15(7(wjv0LA_$4!7aWaUaQ`Mnd=CY1cfd|X+~nbkqOHMaIjmnT z#6Gg+t(kwsYUV?f+u1Lq(n7v&D~6CLhEPafHYYfa-38~N7%V>RayRu53gGUXor-xi zImK9AbH7w_La@^+LA2di2BMHxZG{jLg%AqyS5=kZwi?KN*2DB0Lw31B?nVLJowidU zbRF_|^&9qqntmx_daxqq43;8zG++7-LZS#l;<5xsmnFE^mZ9fjIk>|`ZcotN_~zY8 zR>k(?>H0k|_C0y(L~!z-#EwKP`*D8wxcl+105{duk24MX#G~>AkA9kEY(kiauo+YGVAWU)XEy+K=kpPtq($?4?;4B z798i$g6qFN*y{{bA9tY~=LP8F3J+i9)Q3;Mj^*MM6%;(H9#s8&%hnGe(GMZ%W~d^wSB+>`UWx z%B3Q`mu=}066q1b1;(hI;9fS+;7acXaCP^JPU($K)UvI;5Z8|djvbq#IJy1r5a)*| zSAT60KS6Is?1V&`gk)4AxVOMxaD&;3uLW0kALf*1XR^|C^kFH=@m{AK2O`A{wiF48 z6bZ?$pWry^7TjP;@d|Kt_cl%`wk49Hqqj*>diIVhJ>o#5_kCM>ghYCTq(uvkEn09c z>6sS?sxfi2-kEcSF%wAr0^JK>o`;|4RO-hX;)3uh4RQBUUaI3phX3SpB4ShRqL_wV zR1rRBChcfj@S9jkc2V=4<}6OO6nR+>^LI}spT=a7W%?n)!x27<@Hm7&M#yqLhmc(s z-+PgXJt0vMA?dONNB1kZK~Rw#<)eyjM>eu%|7{IXMe@Skz*NNf|GBPlno~t16SW+F zZ=QnA>nELoo_ge3^iM98|$LP)vv*}5krx+f&BAPbIX;RN@8 zNB3}BIJ*%08j@4@T?up_9p5IeetT@2y!z|mTKv?n=V$}fKQBd*wogd(Pbj2cG8J4p zz6IHf3zTgz}91CB`;|-_f*+W+2ZqvS;-rTaqf=sua?uU?%w)2jCfOE9g;Bx*3mMB2cc#$1wvv9 zgz#%7_$#LLzg)QRae!%X1#Y##XiQV!O=F??K+~>v^0qztY1eMeW>YBTfzxq^tz{ zh>fKLj$14xpqvBI!#8X_5E4BQ3hA@0g4=>T1ozqN;oHdDy&% zK{nDA6B4x$k_At}tub`*UGad_!k%WJYUx4I+^@eo)v`2!TI_|8lr=I_h;`(+7Iw~ z1RwW$JJXP+7$08iCy%$}t==Cmf40eX3v-KqoZBsS*Y8{{nb+Kb-4yFBj0iZi)Ol~O zXbrK9)1Qys^HWJGk;zyJOp6@K725?>}Hw1jF9EJ8X-pjUxqZqixCoy5R&x)!L2cLW(1H8jck+q zC*l+%>ga=F@SADJZbCwZAJ#o`Yi}3M*vLxGn9A)PyZ5}jbMu+lMB}fiX)6BME`KR= zXXF(A)}Ky4UdMn$xDI_{)s?Hd_BX#N*|S*jt0PvtzVOA?Gr%HkQiiYL@x?V%=fF9EjH;!26JjGL05_>lwfBWFbk#e+D_l>>y_H@)fUPPSx ztS!?Vh7aFt1wx#K?EX5!#}VF&@COJfmnRUiQcpq~VxNS>J_&^s z`&Pka8|XjVK6$40v$xOZAY=FGWv6|XC260Ip+c&bISpB8|JGm2{1A2ctnKnGXiMyp zkk}<5v<3VX95UW2J{KgO-OT;0?ZL7D3N_ftIKU$i0`;+Jgk3*xZzm@~Z5VFk|eT4RTC zmD`7|;IS_Yfh21y_26Lzej*LWw(M;r{30(h#7{8@dC~S2gYp8ybS|yecqHh47a~pQjGMU*UWLAW1RahNjuj`GEXKR85HGIGv7= z&&Ittij9t_Mj_sPQwP%&fc7keMf>Pv_+wf@vLmYb9c@cy*VVU#Wnj)SSdUefSckOE z8d6#J`*TQT-|xS_<481qB4CpBn%;hDi0uq%w38$go}k`pjk?r9jxkt6R|h?2ghkWW zs5v>Dht%7J1Kr{l!+`_2Idv^vVYtBz^TE3sY|Zxxwf;-Fu{BdUV&k-CvP3!>hrP7=uv1Z7h4!q`9>@ zlH_P{zGa+_MS>~F%X*mqN^~*K5jU1z^nmefg!>_$=SaC|fKj)8YwwE)S>Cw_DWo4k zn4%a$q8LK5NF}&6hR$Qez3T*i9Wr%qtUCo>;`9z4zj5Wiypw_k?9C9-z=tT)U@PD@ zTLFYb0fb~@U2q$aui$jwI?Ni$dk*7eMbB%HyWM$j5(e^mP4FOl(eKzz$OerjyD!w6 z`98-RdI&6NJu9{s9x;6YoeYspGP#neXSEq>J7*J{`l_~!tJ<{uIQ(RhV+H#Y3NZq_9Z|Z5#_0$0+Kv_W5;3)XU6ATt&ov=jt%7l`bejxv-vwd z1^8Ic@rW6QFWOTfoR0DN;VL>l-yiXD2TXxG9JF6RnC)y69M~p1K5uUA4C7ryPGXtA z^{|ZcI2X?zg%ERw?q-Dh zA#6oB4B;gRA=~b25FUt-xNA;-^0A*6ne zMo0lY0a%BZaW(V>jyv3}Z3u6t>p@ql$f^x(J`2zZs*{&5Ura2tEiV&_z(ib>J&nbBUd*tlr z1$fErXY2*oKd;2cdMJ380QLj)0dFFt z4|o?LeZWqH^Z~$WA3(iWKH!&t#Rm`)A3!LiUj-7}YyjCKxy z(NQ^n0Pw4bcfWbXG(+*Jz~_0Vae55i?9p<2TYGJNUBkk-5py(mXV+wpnE9K31;~gG zfAh~Vf*vhc{g-9p2%6kZH2CM0{309V+IjQ<#8u)?yH-bhFb}@;Byi?b^RomY_)fFHbw2nUc
  • (JAFth+at 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 literal 0 HcmV?d00001 diff --git a/Code/Physics/lib/Debug/BulletFileLoader_Debugx64.lib b/Code/Physics/lib/Debug/BulletFileLoader_Debugx64.lib new file mode 100644 index 0000000000000000000000000000000000000000..ee5da394e9930f5c56499b74f97c6ce7eddfb730 GIT binary patch literal 614654 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ⅇ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 literal 0 HcmV?d00001 diff --git a/Code/Physics/lib/Debug/BulletWorldImporter_Debug.lib b/Code/Physics/lib/Debug/BulletWorldImporter_Debug.lib new file mode 100644 index 0000000000000000000000000000000000000000..021e8935ff2adb8140b5f6c580a76a5d073d07b3 GIT binary patch literal 1036344 zcmeFa3w&Kg)joWnX@PRb3dpre1r&rNExibmlQc~eXwuLNwB-^`a!%R<={e!#q!&;S z1XM&ol&gq=lht3-)LG3lnx;-~+E2aTDE_(M^l3Ai*x!$yn9GfO zD7V44?tS-qw+!C(fp>l2T_1SY2j2C8cYWYpA9&XX-t~cZec)Xmc-II1*L`5~d8g+7 zUwE~&Oc^K)4fGAxsw?~IwQ`}de5lm7vQS%IuH+BxuOC_(s8?%K^Z9&#y|uNiEuTN6 zb^qbX5kc-G$*y zvZCtRtE2rx*)tH4Tzyq zQZx(|Nm{NR3WFK+I2a<>7Sc9s5imf37XHE{l-L(0k`x~Wz5p3H>V?Bu$P0tV@lJa_g`-xl7jJbS|+)KDUX4!m26VRK5$c4bTsF4I zVb&>2dP+5=(%t%v`qTzBx2xMQcIazeu%LCRoN<)OO7!%-_+PnRURCNYR0_*WHOx88 z;VbE=q*+NGvy#R4~WQ0q)QxiXAv{0$XgG)IJ zB9p9o;<6N z+6p5Wlp7I|Z>!02wine(n()Hm6{T89I3}@*sib8BrBW}d6)Gcx)!It^HlN0_tSZB5 z+3d(#np)Z9#iUCXi{l#IY;EgqY>Y})Nr{|}-<+l@IILP5Dq^lu#fTqcNMd4+)V{V- zSXmwzVd=vCnxsj!JQS0MST>A2JhWld;h`NR4-f4qd3b0?h1i~9cxYFo#c4g@It4{_ z%F}157DGhM!$Z5I9I6dLK1?tjOOz!=sf59ww3$pEf+S8777TY*HMcLLNDU!Q)`5!=q6}#^E8$h)dSt zbS^R1@KDhymzWlIl;NRCC~SD>kc9HolAEny<+}0>y4@<>tv@PNMW5QB0*8l9aNkVB z!^P-OSqI!i)JJzRhk1}CBV>AQ z6opJm&MgZmgDW{fjt8t$loPelNu1Q2U)tK+x}*yi8}c;w*W0RVM2RkBN%8$vDTP zqEzACqeJzw;#O)Ys3Ad3>#de6^=9^`UHwArMzQ60um3C@Dx~7oS+>(D4&%R z)RU#4sX6gr9Bf=!GIVMHBQTvYRXus;v&pU zCCve3lcd`L_9RWfxXvP~!;T73VO)rbnDxXl62`@t>Oee%VuA{D+I(S{L75^S)UiTD z^0s8RsR&p!#g3NwMV)JRvr;f~RAMiMGGj>0P;Prk5|@fss9N=yoEIA(wjNmv;cVGO zWJslVTO$@MlC>|48>9`GOv0o-voKo@5(O!Q*{vYWk+7sWOgNscB%0$}LbE#H5*jp6 zn{;Ln8ymf?-E1XBx!pFWw~gO!$C^S56>rSK#&6hHVM_^f&B=VrrPGyouq$zaIx=jV zlQN-+@BJ;63`1tL0c76{xK*Zwsp)NboRjREVOf?+lJ&kRpSP#+o-LKmx=J>$qLYU* zfqAtlA&|O^2>F=50=E=kfBqeQ~&d|%_#gW9@!yJydvoyW35 z%aqnuRJrMV3&Q>A)Kb3gz8tme2pI(qZ%^XJU( zn%{QN7({!z<{s2DyEU`cx${wabGq8+b@#+t2gu;!DsHea)L?KY3ckJV;O@5B?O8>; z^F3YN2e%yr3aQHCnwp!n#bWgn>oZ*}8uiUJRux+?RzQ+wF<{kcbVR(YY~s;dvQB1h z&pJwK)q0ZBwo{4b7OumRmZZ0HJ5scE9iX*&B^g0~F0BA`b@ooDnn72<>t;b?i#}f9 zGsc+|aVhmsn(u4760DOqj2rTaR926XM9E#WgV5$w;U!w4ydI|~>G1-Coy6qGO-;1A z=V^j^vY0l>+ybI|rJ~>Lk_trfN9DfajB1M66BUfz4HcN?Vj`_+YD;5leokvXgQxJ4 zX@bmpi)QsSUA4j891!6gCWP#G#`LuJ*fac7e+&nff#AaYB)(I1&6vZ2uNZQr-ZJUS1 zsXCR-pCF(o$!?S+GeT*+99!>l8i=QS1@{atLU&!BfpnikC=kUDkYcRe#9u zds>$2ms6BFV+rZ%=eKRuAE)Y6dL2jM1Oj@JT>VM1x%!drs(vJ=svq|Z)lYX_)sJ*v z^(zpi`jKL+{%Kh&Q%tWGVC%#%CyD2fl&+VmGm#g$#4e=uLYENcVwV6?!Ap0QqL=TR z3tvLmi{A(m6(FT)RlrgT{Ug<((RvA!ym*D<5VqdX#7?LbibZ*y%;f}Ff53B>7^}(x z`NO95b}sFsjlV*T);ckq!=dE@J$<PxHV`Jj`N}0KmnirLtnL*U8dR8=Jjs%Cat&`0RETW}C@Yoqde9cUthXvm9 zGt;QMADP9a*pOK^@dkY&o1IGE&B(++`wQVdgf^jW2V@deVoDaZ^7^zcS3umO0f_67 zaN2C{#b!$qhpbZ46XIA^W>RdGm_;wE6e3;n#3eLgcb)Vdf~O**KSDK&OzcCC6BlvbuAGU<@tB0zCfL|61(-sr0JSh8VS60;~M z3PDim$~00XEfZ@}CA2@S(W;5zyrT1Di_kKqe4nuewRIuIc6$wMd>5GND3nb^Q8l~J z65sdPCeJwd5Fab{);>%|K^*(k*1CbSN; z4k42+y-&z0oRk_rnv@|hiIB_!d?vL*P#osTrZEoBs>b2rwRpi-^uV-NgGd%6 ziwn}?zYHH8!lY**p21<6Z5tgN#8W=BwkCxp5my$s&FPG^IK@)uJ#dI1Og3FWfr6Ie z3zU`{0e@mFHW#nlD%aP_Gkv)yr&HyDP&z6f2xUEfI2hf1IGB#i2b+;0d;VTNT&=l_ z&m?c`-^aqBbnf8CH1qChalZm1iSL z_v69x)QN|JQ$2VFL1o&ONo7(@;#hHD!xsIo=(s~o6;h(t&LAaq*|F3L^o+Gq1&g{# z*KF$95WxF-Sf>*v!M!|@8Y&fPuHYSYoGu)H$ccBbE*uZrA&gjSMMZ}p`7=%-+9_Ix zal&1V9cHw}6iy?%VDb!8h_$f69HfJ@AjH)O9VRV@S1CMa7fxbxu&gyO2Q#Fia~Nl zv%O9?Kdp|&c(%Xk#?$I(jQ8f%KW|FNJl(c8=hQ~@S8mJ38q-5qjUBmSw+WGfS!xWL z!G=MAmsbu=N$;Q7YfR6?8V?K1q)~DRr){{PFk3(&{Q6)*;nfmD_~PI|6JCW(P6=U3 zd^J7lP>3DCAU)}EiAtYJ_p!3|-zWy)A09l~op!oK$m$7x9&Iuil|L%j_?dvb^Bt^gTwrLTEF1Ehbe5!t9k#si1#w;yGR4yMr&u;d3hgN) zYXQb1%P6L^dP&w7cv;3MQF++aXYG?08itz5ySE&gWEeZ^DoU&>Ub-~a5|8A^THKNR zn9I6S(%*RGD1|gQ&mJe2B7LJ?32bL1DXssmHeH!qv+4`ZT)D#eeCbVSZ1qWa2XUku zse?;AAQ$NW=k>3b4R!5RK#_CKm#~2-IF4o_0*nR|ib7g#k!dg-q&f-RKjBVoc z0#;n+_gpzN8Q(bP_uIan#GC%_=+wQ}qA~TNu8_Q@ge*lYh07*If0=!KhC8xdq4td$ zcmI`?r~Ym+s{$REF&Db{*!8&Tin{M)yVa^A3M6b~ro73Uy&S}~LK_cOQg2#O{3O;V^-5-f z_0^|lFY)}OtF&rJAo;$YZr$@_yf!KY<;v?a*IgM#z2HMB%cUYf|FCi5E3iHelh8p7$(LRi2Y*H z<1kE&trPpj)WQfX4&RcomT`CVpq|KYCpc0KH?1ZG2__fLB{zaJy#bU}f#j=JehCvs zFRutiOAi{m36h;$%px7!0ufAYUN=rFFyn&NsN=*my_z0OD-Dd&oKj*iVdB90igTLZ zjty6*FDx6h=#U_C`MDJeM|_FP*UW9Z=ZaM}P>5ZKBJw)7%B!XY(kYADI-imlNSM?r zt$OQ>YHA228a`#29ko)}IQSO^Hkxcun&D^fzy_524g%uZdNYY>%1SAiu%wF%&-mHa5rb0oWXEwzmXyTTK|zH zzYtZsgKTP(LKmB%!TDC=d@qbu~1)ip5cKZ z{Ix2@k`pV!eGoQ|_JL?R!4qmn9P0zQMW_!%heY~tD%s1VKp#$Ejq{l)Qei%j!5-zu zK%fNqaCujZ4`(rj_;Be|gbx=@yucjbGcctl4;k7`6yAf>xubg+g*E{QH`N^5LzO1Q zorLxv*>q&jA|?g)P%$m83$bc_Dwb8_G(2H}ClZ_JOEFD({`uBol{Q{w1Z^Vlmw*>X zhlk1oIQ7y~SV_hRYJ1- z&RK(rqR<;a6+e*|Oec=0`^*wBi%oWtltDJ4RV&)o^45^*7bzN1=c2kU+ss0B%%*1* zg}>QKHptryL?)Nx4lh+ctGATzGBze}E?Vl*kf%6Wa47#QO_VE#I0fjjiiX%|~mpI&Zq$m7VU`wK%jLY^2Sf83aLZp=5>yF4NbXe6&F_usjE`~9n~5;(q=lrL;YAA=6CFy*C>>pY7x&r;N#N{_Z9s( z_YyG>kmY257a#McCpK6kP6^G1GMb%=B9UeJKrkv37#3k=P^=(w^PbU_IG#p>AuWtZ zO#zssFC?h3LL^2vI<6R5LJ81*bK)54h4$7;ctuaGRP4p4v+FfH7%Pn#N!m8Tm8^^A zEaj3{-NMm+${*p9l@fhn3N9|OCpdP*%dH}DO*#6(BSpnKv+KyMaJV=m2}cFp%0jUu z24@seiwJD$fn7F?XG5V_nthWE?L&WWyUlml7(@qSlwOKE9X-*&6#Lcsu*r>uwJ4S` zUAto1f+NeRg_Y%j5f*MhN*~h08Wmb$ zy)aOhpiyV9H4k?gf=R=R??j>$7MF|kI6So*cD_K0a7%DMc3xIEQQgtAAm$W$!o!@> z$3JF<7p#@p8R9%lT8X2fx)*^!kEGm(VL>$evrM-7%9Uby0O4qi)Lne36Q$BO4CBi6 z@~To_KZaph`4GxXeU-#Iz`Cq4@J8+yB3zMMpneFzKv~3l{IYQeW!^iY-?^kiSco_1?i`D_c@&(6dMN(pKB9+hhxSE~T zTtdY}Ok~56F!SUn8Y~eHQ)CJHYHYTi31c-Z*CVSGu%l9K#n&@nlxS%$$~D1KWglVj;5vQ84DAQ8naz9Td0uLH1!An#3@38b z!(|byVsbTt1AtLCDHU$YN{s(ml!>sjVQfF%#)eH%+Tn?#FWVFyuBE6K6lfV=6xDjN zkB+S9W4fhpE%AX6KZDN3usl+UuO1EiMKGF;MA-9P0V3ixoD@^pvt0oq7~w`*cqdMY9AZs?eOezcy}pxjX-o|!HjbAi>rLrd$(7-Bnp;i|qlRzCJxns#j+l+9 z*@;Ik zK&7l9l^R4$a|gk~2Up&vi>4`eR*|@VJ48EVwAleSC3Qc9Oddf-Mk)6|QY)-ogp=d$ z{z2_#8nK{?E@eS!WOS$=_eD}$6-%!)uC0|Yu3e>knNRL5L`Y`g*aO8H3Kc~NH131K zz@qmF1B-qq44ff*zK4jjje@1yze~_X4VS!+fqkaYgV{jj%d=$j9iCe;S zHWDo$XA_pAZ#K!K_VuA_7B@g0q$kAThD32Rq^ZDP(h)RJ&=4;JC6i*}N6kayi-@6O zRVAa8IB1?hO0=YCj1pze@xkRN?zHkRog%V2z)@grZDVJ|-C!-W#5S>I8?8Kf_;+YF zlw-VJ&kHw%LN6Y*v!YH2T@e4A4thD;Zaij}_&gMwW-W~1HDpf{m$S$Q=-BuP5oKWz z>SJSRQ-^I#8sa3=Sr-TUJFsiXPWDUTfSkva%}8cmb#YU&pxwoMoNfUL8c{ zM{q=;j3XYb9lJQ@SB7ZTXnCH1mrJB?@$m52^|fIVeJs|U@T#)Wp^?&}74X0n)ge0a zk_tbRapt8X;#8;W@E?{!Xu!ZSnczf~@L|)?d;jwGT4A;L7L>DOlr3OsJLU*tDrMCQD%94i$#9DG zY6YINdEA%P8jH$?K1G(C2sDpd()I0>W?qUAT&fKg25?BmA&y9cNEKC3>Xl!L4~s&s zgrPkr0^z}td&EdR^W1VTENSXCsHs3wSmk^U6c`il4U2wXxY!$ zmRT>4_7u8Tt+i&hQp&`|;fwA4=-J zeJ2iSTtIX5KYAC7Z42X@m?@gDS(7dhMflWt90)|k%GzqM--?zU=(meUN*y&kzBhkx z5H)~;GB=7iWFA@=8l?sAWNZLKF&g7XXh3n8o*4NR3+i$omg<1wkwSusif4(9by=xK z2dNZuXbZ$Oh@=sxICSWO(O5G8#wYMWK$^S<0cqkM1Pshdz=S(j~CjSm#}?(v=xmP4Der0 z`?r37YIAe{z`%?d5pL?tVpIQ&rsUrP%~Ojr8VhlHae#is_}_!7o~eT~*^MM!0EFV` z{z?@HevE=g2e8OlDdOwZ^auw%dw?iG$J1#j zVN7SE)t0^)7RA%s@-VA!t|b|EVM(it!bnTsf=2e3o3T*xGZ~_(HQ&;%3g~msCAjq?191Xx3lQ$%Rq#VWrR)U%z*F%;qk;HE?PPlojS}%zGyjSZZ9W|QU+$>(}#WB zK%LES5KkN3sE!yLhtf~yS3mL>p-~J5MY1hUEi!ODRp_O{vtdx60g;0t946#`V{R*; zLR%51wjyvxt-7+iw6a>G#bsj?<6^DtEcj&>gXNZ%>6({XBXB&96CLW*ftmE16?I5c zOViYju{4W*NyjE-x5cBsJMMphx-^uE) zY3i)z8BJ5CH|?k1ZxsLBZ`yuSdD77nH_YX7_kL@G+^O?6&pk9Qm)qcf`M(Ww8~(3Y z@V}$gUE2R$o3gX{Bz) z&hY;?&x%UIT?-+p#KdbvFT?2HiLREGDcJ8D=o`d9Dt-dEZzX@f21Y;05|sQTh`Mvw z*vNJeS{kJZE9O3Q03JsTq>o_md94{HeFek?!&-jwT5~s0`qqaVD1F_-4GheRZ!JGG z1E#h746=r`{Or=wfxA#)cuhQii{_nUkrlI>45H?>{0s!@tR#b=w2qiTDp`8g*YdNF z=;x9HW#z9(xZK{hmLH}@o9zY*DaY`FrIG@rwfrzKF*#)?#4<^+C6r)^IFPy|cyozA zzks=Gx@KeyKWyj5M8}tXDBAk;>0__k4nXk}gFcP$4dZTp^yqhhB2$PA$_E4u@iC*Q z6dZ#jO_4FPV6^BHQd>}Hj)|dK)qof(B}Kzfk)-A7p)i<1kAoqC;#9HQQ*9A2K!Fzi z!X%W~7bcPvUwro1ohLc!1*j14X#3I^CjgJ*oz5Pu#%o1mU!jyT;*xbZolDHL6|Q72 z5|&F$3p--##bBshZfsa6S5$O3!==u*S>e?Q3*yn3C3I*xOjNpCzfnwWP*>P_%KcChUFs|6o$?6$%j$nx{6~ZNyJC>sAQEC zwrw2WoTe(s;@3^mL|q^#S$yB*y z9Zu&G^SVtWESH!Tc9bEfVyIkh-XW($5KfrybYxSUNTd74 z=Q>o(?7}c!Gf*fHid?V)l#x>q)wbYG^<^U7q=Hn zHGkp~dOMd~TC-)*WqPXRDNmI`0xcY-i2>Yxq%Ix^RiUXT?bKwY`{7Aag?Hn{5M{-! zRB1J4sA=p4)XnTqyLI$*5x!3l;6LeSZ&Y;-D;L)Bh}J;wP{HC2N%PQGz*H5f-a}1} zJ3)RsDn>d;DYY9s>cra<-M8dh#^~)vNsFFaP1=o`thF08QEfL`TGDRxghi{%BNS#O zf72j(yGbXrX)!*p5Vsx$BDW7}9@a$Gw5+MDY00TltFhZJflN(H<})-cIoZ^B9#}NeEQnj%0K(p;)2o3&^<6dNpEfK=Bqk3wrHMCXU6#fNvmS^4Q?z?5Oj`@ zmCx7-+Tnvn`R?`QoQASkej4kkcY6_FU`@+fsSgE6yHNa0y$j~crZ##{77YY-;+kT4 zXpDs98|Ih01rXX+CxnfLR6c~d0VnO@7ltQs2}ZaRtjd0x)|oAP$nXY8Om)hN#auR z${2e$k9t2ljmS_I8pJPJGfCFm*oPnDTW%XPVNx&O3KCA1?_$mDRwiLdbC_^E2@+KZ zv*TMrvpS9w8Z=OwB!;n1Z!7!EN{e!vUf9HMw_~Y-Jrx(TunkG^BCM9V=4AG2jh0SV z;=!)O1?qrP|AZ(^;BS3yS*m768<+OYfLmo+5EG9JdY&dkG6wwV#jr$L@4E7Ndm8Wf zQt7NGWwSZ{ewhSdUgJvAr5+`@smw#9+jYYzQMNW|n0kkkkR%u}&`XlEB`}dNJKxth z^`N${-tO7+X6MV5ddrm7R`#GKrA+TQxTAM=+nkR4!rsm~3+5<^21;VhWfbpoXp+4DKw!$QtCkDN` zE*%lCc$;|i=B|^O8@-N_n!cW-1b|dx-53URSkf%?U|>gzke~y!z@Q|f)rERV^lh3!HDe!7F)?ZXAtE@_MPqvsV(<6M2=SrS(dY z5aw!;08+(Bca^G<@0%+}LfEUv2oe<}rD;{fQtd+|r_*uM^gZI{9?AyeS=oE@Y zc|p+SBv>`#uW^wD@`p|9?OfVN8>fXDE$U)KiIdd$3{!Q0UIb?QJSf|)!+U1<=3f9D z=WDaTv2B+Hj;*^aaLg)Q%O>8S&$hEurT26)I0bE_gu}HRj*Oy8OvxfER`JE!ylO6e z^pS=ytwZJIl~U3896xQ=;|*i{a}X>JS*4`M`mub@q}bCKZYe~%6Km&Kzex@9n#7+9DK6w=%^ay#tMrU zHz%EnBfsEE+Kz~%DQzi4W*vrDo6=&yj8%^mk8NrsNH#5|kgX~)A%u=Y!)irl5JBCp zLI5&rFh~8A9y2VnHnnp|X;G6ivrBzPidss`%$s<=-mj$8*rD0A>RnJ;nU2V$Lw@xG z#YPcb(RXEF_^oq z?3qzJr|j}l50qUv@d~{Q8UvT!ZDgYmlbg^wfGg4VBDE2EXgrfH$SQF^t8h|k{0vrx zh9p8V3-FoL3c+Mr6zw-pW>}j0{$5D{*`xeyagil^`V@HK(q-zutkh zt2~Yi@lRdh-*|yJ|2La;_1AmAQy9V`6TVi1cTG#szR}8Yqj+&VEkLCX9QC%%WhaT) zH^KWy%R|L(eAtXu2&FHL(=E|fQQX*-hK0re$=AE+y>s}OL1BnxD!u-g&v%1`y^Pz8 zWV%pI(PyP(_~;NOJ@Kda+C~Ql@st#0O$trIR(u_yGt%M|GaO?Il+^~V zwA={z6L+!J;le<i+ZJM(RuA4$$LYfHhs1aX>%#G{9l{trBo@NS zpAic|QnU`!4tF(nn9&wfIF0Or$-`P9)+QlV3(~<^5Pqdb=rCz`r71jT7fxbxu&gyO z2Q#FiaOZ(ojMv(>^31XFiVX=E?pRG7|D2f<mwqCS4#}xi-SX|Oy!girlgNg51kY%9l#(xYQK@PTkBWE z%AzYKu|@32o$wEj6>wwf)~RiaMQkCfC-`}^8F5rhAW~EOOi7`N)$PP4Ey=?L$EVyy zYu$oIxf{k1EqbdA{H~ut8k0q(0vnRM#DFi7)=Tj_j8Y>F_EeOi9kX?E6O-w!M^;wz zJCa;0+$_z|L|HcE*C{PY4?Apm;j8+*BxH)E>rb(4j1=0tpR5HKk1V5@uJ2#4@`_Q> zpj5O^UTDe-*c_Ua_f4@y79lU*yfxMmuL}9G7I!2+=CV$|F3wR3X>guBf-gn-M!gc) z_Kxr`SgXHeYyGt8%2?!$Y6j01ByYKM=}~~}ICg9=lA`FBY(+V^hK9=YxzfnjeA`vr zRQa`FV|65%W30|3bBxiU=9UWb+qkSHrQs}Y6vx;mJ}+R!CB4TC&nApuE3=GGQ#&+O zO11L9^!DnY1h*(mR#@{*eLaac{om24d#^=f>TPWyc})pr&2br%@PRsaWV^yHhDw@- z^G)+fdFn5ivntSm8FQhFk6n+et|}OnKisdzFiCs>hr^_3AyVwiFU? z*Ov!Cc*O{xtTJ9@RAJ>*P*R|j-au)U)%#&qpm772+PC=)fmU8K+~Oy(KB-qS6RfX3 zHG7HYCtamgLjuY7^>piw=O5JYw7|MQu~dP z$XU=y*3qMuYW6NQf~Nx+jf{)Q85vL{Sn(tPt@x*2U4^BoWLZ%qh?^`EY(v?IJMtQl zsy1F3RbQ)#^G%SB?xg%DV+cL+zzv9YCmUqH3qp8H5Vwo?+1@A<{8 zmZwDB&!I?9u;BO>>vD=Ew}|wB4@6i)@`+$2I63MJA+a*-7n2_BVPb57*e@nM)5FBr zIWTbzf+N*%(`r(XU~=JHawAC78$ekVNWN<2moQ=U@`_Nj z^q{euAlb>qEYiU(5W&>ub>p-GGcH(-I!;W}tLeeC(!eOqDJ2FICJwBxIH&pT*l>0F z!m~k(4hbTcAHJb*#Fw~y&D?ebK(WdO3b6}OL|*4sdDXN)I%QE?=Ti~`36ol-Rd1b9 zO%0($!;crg6*f5`0})&8HW9_k;J#Xh;~@>Rxa7=qCMMe)|h(EtX2pPxp&M&VeA6O%n)^SSqUs1 zSymdY!^$cy_f1)46K~M_sBBJ(`bckVW-*3sat8aMwcp5~QtLmm539NBGGes)Q2Qt{B{1^z7ARjL8it*tr zrVt-4or>_`qKOxn1AGRi)Z`&UyNSYkkUDpC52Mf~0O6*ZV|%F5q_~sN9weKN>{-O5 zz#b~5#dRT8txv_WYMh40MA%EjuzuZ?Z)9(NFIH(gR7TJy0)J(Daddd7Jb+U#J%yF@ z;9~l0ErPR{Kb9&5oO#7Vop^$=)?KYvX-Qb$QDe_hV4H%i(v|SE=MX);Npm2UW0=?1 z6Khw}X^ESC_?bf%a{~vu18Ote3WIG^n#TiS9?5Tu{vxwK`7pF$@4AgI4rXr z=!8WKVp#r@vjp@^cPLM#JW|DIez-iafKJd=mUrOTOC5)i+RL>P`wKHxJ)s1CbRSZ0 zL5n-Es;w|mra&&4kM_cHByCGYVD<*~MWuSJu%c9~RVxtG2W9N>^d+5agI7Yb{LWd! z&)AaQ0IK-G#bCNxneB!9%n~q*O?Hx$K{ldQE85ob){yFXDH>5lsIJSl%TO${>5)$1 zZ?=*R@-_pJ$>q4iOO?;+E#<)sK9XlQMYwvZUy2Jw z;&9uMqDTzsDC2pp9(+xP{*v!UIga2ZBq9Tp(98}%z~qkd8hoj@T3ib!*2cpJx9TTS zM9AwHDlA8QRJp}7<)DZ%c2A6vKgP{^N#FW1J=G!})xgKn9quaz1l&t#yr{{^{w_W~PY;){Hl7li z4P`Wu7DXb<@)2cJCNM0*%Ai<5&UHexHu#UM+M!=La`)9c@$Ao-w)=4Xf~#brP-1X{9J!e zzRh>oU`7XHxR1^;&R2P5xn5pX>Mm3Y%URphy)gEx^99 zp#4N~E^?o>-qA;@LyATp5`}y45d-r$TFoB%Lp3a@u7-Ki90|s$-9V&=^%r{Y$Zjg( zMTUuLF!VH$k1wnatt!>JDp=d>ueYzQ6jqi8Mp(E3DSc`i%V}tZbvoLgK%<)1nuog# z!KC5y@vwGrxkyj$Q@g=9K*!s{PK(*DSPF7iXtyNbqqSfq?F)ZoP zZlZBXZ+SSY6f5{<=K2z*Wf*@yutmFF zEHuZZKzUnH7zyo(`RlgIm2%zj(!=N=kqaiBm2$!2eRJxl-9WKr?gvUIquh+rnJ709 z{ep4uA`bY+XB50FQBa`XOxhmz=Lr^w&Okn3%-to6bZS%FFD$Q(sI4fQtkPhDM9o9A z&`iT_Q{xKKoQiEhQc3OVL-q_dTcV)XfT;QVfbM;6uQU&^(c(y0zTmuUiMYgGhs$10 zAr1q%8jLm=3l$R)n~l-J%#&k$utYpGlO^aQ%wy<{F^Wz1#;y1ki`?|0=ELG-kRrv2 zT{>i7IK9D9T}sk$vnshZ)E+kpK3tEC)JrSIW>pduGdl#JcBQ(G2pXtD4@TBZXutq^ zwx`FONGlUQhbvcBVMVb>-?x$9jm_FRUQNc9?2yt{s}_pG7%Y@}Yt=Pt^ZA9XeLZYy zS03r9R=TUJ_^M@KaW)@bqE_$6j8hOaHr;3~5is)(~HEA5s~qIOD$p8cs0b$&1zQL+a(1nOSR>yv!N;R(=e4%sW`F#YiZ@us*<#AN=qPm zhtDkLRhdOBHr^yEre&GbIb<|l!_``yCS|;XWUu|JQ9;mnJnA&j4mu;J8?KJj7Y~c3 zX~@2)ToWu+_7N6OztcAo(cIDNvRS;mtf3E0@D?5Z-IC!%j-KStB3Q*z!3d7#Mgt(J za8p)dHp{|#gq;mz`|+Mc944Th(YRk_hY5yjDe46UYM1t9qb%&BBP;rtZs}8QyyxH_ zc44y<9;d}e)rS2dn5RS{?8(aj5%HE^>R{MYmjNP}yF^-87zz;a&0-=x4-U;cOj%UJ z(qug;ZlAVeBv^$u){)CYOA4lxN3$}Yd_R~h@lri*D#hS{g{w**b&mWFwP+kZ``ckMGQ_b! z8e@1x(E8=hD$1sQJCI77_wfvYOT8aLhB6?##GzwOq}&5Zt*~|xp6PJ+4{A5li2Va} zDGN#?qeJz$FOu4-*lD1$tCcYCTBUsWQ|>K9NM_;K1I6kX^#>WsKVgugeg*tz|Gq-Y$H zLFkId_o{`C@3}{Dr6 z6ngQfofUOL=z_}Z(`4x7Y==+ilu;|62rZ1@HTZ-kE@zSLMqnE=M3jX=sE>`MElRcz zFYd^3lIg6AM{YW>Nzb0Sk-`DFoGF`;%)ILAQf(e>ZBxIFV>pIaANn}vSB7ZTXnE3y zmrJB?@$m52^|fIVeJqyA@Djn%p^?&}74X0n)ge0Jl?p#(H1pCCaT?lnXckK$G+&?O!Xkvf(?g4L`~0OkAYb$g}*2bwGusUU@8r{_9E|u zMoYfC=_j;DXrni(zzW_ynyJmq!)wk8we@N;oMOFNf#)bH_hq%lqOzec9VQ20&EuAI zeLJO@m&%KjDR+s*5or*qq6$jAj8E}lQOK1rwC4aUOp4qiM(Ua8#pZ=2P2C1H6-WxJ z97m%Pj}Y^5js*w#N;uak&RgNrlI&n4E&CbUG8-G9J%ye^&{{KFo@e5=15T+u1Rkj3 z!#LvDA3qZ)YI^}@iskw!o#^zn@5CXE#{l?H#^}#_7mKxj(;L;9W3gG2E)Yfd)bTUa zNK~w>tp@w8XxV{&yLhD3QNx3^^9Kh}11KnSqliQ1p@pGQTJTQB2CTJp^8;a^I80BB z{E7v2xerTqKyfdhprYbgVq;xas?oVY#T?q9a1A19#3|0$x?nWc41nRm*K{idv@<^DZFMdly0IRD7UMHanW-OgNTh~ok;w2sfh}@NZEzvI zDWZwLsy@|kvcl6gnbRXCW(`AW&m`$~P&Z6q94bLq-!i3-rg7E5{Nlcz@=$)Hj!&sC zZfdq(9MRm>mN1m@b@Ju4!cgA;J(+{AtK%)Pl7A00Pc6=9EX3&pGwC-g{&#VJe#Q9TrD@u~XVEW_ zA5`s{I@qM8Yx0BpY3VZ=L9B035Q>aN_ot=)J#ALwV6i_*A5j0@R8V-QH4iXF5q?I~ zv{{4A193iP49*y&UzFZoRLg0gQPnpX;|B}UsdA&%H@89zZ|g1 z2GKwH|0iyh+owobnX)iS*#6KBa{mEtyQ4Q`w{9Ar%jI)hwF%s!2zM&}^7jilCc4LP zH5@i6M0awz1smmZCtRfC^7(yKSZ-s8{OmFv*LdeX8eao&zt(YEHRg33<@AXZZYv}1 zNfQoTM?J|#?)X!3xu<|zyxTZ-_lq!Oa<2F2eF!&YO^kdL`F+nJ<8m)9;kbK{660c2 zF83SYzHs!oTy+Jep?6}+$LmY?d$mO>}eQ5T*7xy<^$uW@{6W<%8 z2e?TUKVOHyxcJ^e;^Dw8tor#*6Br-g#lW3A?B}~jU|f8gq5Pfz?)l^VeB0GH#>Mvz z688pf&k;Z0GJ$dNQTbJYTVD6`T_i9rzCDrO8-aUt)X%r^Dt~?_fp2HvnpXSy1_Z`s z-}c~J1Kc@l{Csx{jEj%#dknaj*ZTQ(K0YkJ&A@e>;OAQ-FfRMHf_WMq=;vz|7#AP4kGa4tJju^@n!vdDHU{6tz+Lf4Ki{te#>F=Ud@lmG`6+(B z7J+f`k-sbgZpEkkd>0Fhi?0EE-vI90r~3Jx7Z?{GwU4)f+vapXU%SA#_{hGcz#aK% zKi}B`e+r;68h% zpYJw-@$o$j+{2%D^X&_g4bMW{#YI2*)6}0+e&+)-|7<_s$-vwsa5g^jmxq9P6ch1m^AY{d{|0FfMmEE|-1Nz_%8d8!q(o{T7%lE^_lt2H)Pm%)8jncOo!1 z2ppkJ{x=1DKLzI1FZ=o4f62I9FD_SpiLV08xnJ?~-2=?)0%x<2^1Jn=Xh&c5^9=xV zuE4qYZUW}v%lv#BUJkvuT>0G__RR<8ge&}fHvsdrz}f7h@xj}`YEe!jDS`GLUM_^5uL0_LAz_w#+^8tBF4st?NV z@xYvQt)K5sU|tnCn|8~l840`tKeInKp58<@ks z;ph7-Ft-YvjgR8($H_>n5a@7ZoPger7_FI0w>wtMu;B590-&?>m-0bI@ z4opelTzsDb=Irmd`96b8-UUq8cR3Eze`7p78cQH&1M}*w9Je`e@qAxeXPAZi$9->H z?pj>*n}CbOXKh`8^u7R0<@;{EdFZ_vm^W_s>s|GOak+2cqMu9e%fO7>;nrJ(-tPgk z^Id+uUj^oIfph7dboaR2CAjEkE9Ys@`z$cq{@AbgLSTL&a4x-@-#adM9xj*OMbP^c zF#G<*ulJk4yd-cgy}Lg!E_Wj?pWZis>HL{r?*qV$dx+y)dRu_GPvC6jJP-NZ{O1_| z{lc&JDPSf&;@8^?%;N%Q(@Xxm%P+^}j{3Db=K_o!d*Vql&TIGf(L5MOqCY+P=~ zC;WQ90?eZVXDjDDP^sHIIW9K~7yXbeW88Qc_q&1F`6-U0KjXN8zem6Muy220&Ul*R zCL+N&u7jdifZ67^9JeWOF`pENcEkNo0`oP2qxD%+99oR~KNT4KmHkY5pF_&zb%@Wu z<9coDoz1{a2WEx95!%G}Anu|_0_IkMi~U*KC;1a_F9GxDKiu|FeQf+T z)^l*tFOIt!-x?VHV_-h^4#(Nz-|pbJ4wzpEoGt!+5x9QE+$#qw;G5reixl-x^>p5jdNDv_5nbFwbr8 z=iByuC_h{-`zBNQ0aMw*&vzLx_XwQLK5B1|1M|*~e!hKnYRE0X<+6|X27x(aXFuQV zz^oHEn|+kuH-MS6tDmm}m}3Oa#djhwmrnNcJq*kn0%zl+_0Emo-;kU30YBd$FlPvy zjgQtlF9qiNyZQP41k6@bIL^jL>uXbhnfXCK-!Z_PC2%%A^5-jnd31L_-^P11E}BanC}Xl%|6QS1Hk;|Lw>%kK8$+9<+6|bxf7V7z5INa0&};(x$Jus zn3wkU^X>Ez^wYRp_ECNp0kdKsKi|c`+#zr_`zSs?0?bSM`uTQhgnhVN_R;#}B4Cbg z^7EYw%y$LOW*_lA0L-J!e!h*T!vApj?8^f)ZqXb4Y?vN`o-f|ZCposF9YU-v)p>~(0eQ}*X{4u`;i0C|KjrLy#km$KIYa- z>zyls`9+Ig@4|dT?o3=hz4rst-Rjm$>z!W&=Dyi}y^W||wBGqy zV4j)l*W1_Gkh>6`HO;WE zH01WjML*m8cLZrGfmtVTu^(vbAfJSNJN0ASKEU~G>malqF|pW?`v@-j(VwiGwfH;* z_ZI`RR^V*)dna(82d2Bk`E2z|^WkvqhQXY<@-a={zvY1B){B9;U*O_$Hq`Ii!0b}te71bt1U=2b zJS%Xvd^7@=t2X2sanX-(ruMrI_j`cZXPDz``#2LQ9vsGqL~ zm=ywN<9iN#9|z{>Rerv6fw^AbY&i2Fy{-LjgQLjTEd;}=er-6X9dp2NA|r5%#-K1 z`KWzt_63f?U)j&pKFD7t0r!r;+Wc>O;PyEe>*KiSXS0v?U6ujU{6)8Y#8(97;{s>n zdk(mBfT@4U&v!L2cLs5Zfmw?&uYL2tzx+@bIEtyd~3n?5HNGU%W)f9>}v$y1;E^Q z3&$zzYmkY4#P|MNaUKL0{ak!60kgyR{d{#`{w#1VzK`A3kXw1XpYJ|k@;`9fNBg?x z0CUeBe!g9P*pRybmn**qfbS2$>~@!*?-RhhDR8#@l6@U_Bd-0(&-W`}y6#^ zV1D*vKi?krVx0z;E5DuK`wK8L@Avba3(TfJar5QDcQ`O#e!$Q7H()A1_4C~U%)cM> z^DX%q_VaML@=Nx;|DlFl;pcw7+klz&u%GW#VD9;apKq5(;D5M$_Wc2vJ$~iqI~ka_ z1r{i+jM|_V0v&}j`-w-g*3!JS!W`b|O-y!}z>*u=~sQm5% z<{vNn`4;{O^AB9E{1V?ze}@0P;^(^&m_1%~^HKS&2IiK(`1!W}E7~P4pM6gPv(4*% zz9C?q7dWT?y#fFGo1gDKVDfMJ?K=mU`~U9e`@mc17jU`qOYQAtVD@<1&v!B~Zws6) zzr=UYKhe(L@$;<%X6e7&_ECR+4KUCA+s`-SKUk;6<;pMd(I|J?1~k&8Gvc{q-;dql zf6#dCEMPX;kmGFmCBDOe`P?`^-}As6)!^s55twJk`}q!-Fh2JkT=a9xmg># z`E~}!7X^k9;t$h!oYwDe0`9U+I3N8P@0&(~_&@PIA~4Zy6CcgDUIp&HiGIF+2#kx5 z<{#T`IzIOrF8bN*qjT$1HXEP21sDBn^M!Rt`zbKjZSLm#25`>+bLJLqzUP3u446~5 z^z(fen9^2$zO}#{xwW6~Y+w%D#?Q9^nCb6v^PP@-tN`W}31_Nb_TH^Y<8zbV>*l)} zd>sOVzp|f+kIr%b3Ai`5b@P1;47+bPJ~x1iey;uVlYuF0pWsaXOnfH+bGw8y*>^v1 zPXcqr`}}-&0`o5kXX3jDd^_$iKKEN(^s}88Ap8CW%tv=ja3(&oZwWAycS>-!{2mC* z2@=l6cM&j!o&9_#0du>Av++F%%oV%%`R)YfUlPv5cRTXC=xytXa!0hwE1ZU#A6CCq^*=+X&XDYw_fcr2oeFA5T&(t4{05h-$ z=c7MkzA0;q_$T{qi$Bi;<~o71#RGcY?viMz8K2vFUq9b$fpPJXea8cLVxyn$CV}zs{QGeHBA)>6#c6)N9ryFwHwk3_ss{XZr1<{LTaJh*^HV zvjoOvAMyPdxL<$N&$rS3e*3lu-+{m#dVrtrGXmqY?}xzs{9}H;4G#3%N9}DUaP2LA zzEuL_vXA`v2H<{@_w)TzU|f7uAI+`fb8T&YzPiA;_$a^E0e8!6Ki`W2%}4LeYX@dT;B5UR)yJoSxuDC>_Y+{= z5;zy%W(SSW?R2o8uLqb<2%L?N;>#C+xoV!D?=fH|baR}IkNkNDV5ax@`BngPfxy}L z$iC}<`Qdy&-(P{5-0QZF>SG!(?T7gJRsnOBz}f8E6MWwT=64JHeD7I^c8QCAHonQ= zI~15zi~M|F2j($>bMd_l%%+F>`922Bkifb4J_*cahxz#)0cL|G{`|fdnEjUe`IZB7 zzQDQcyB3%SmihVK0cNkm-S*M=uLYQaBm8{l0dtSQ+3chC@i;JV9O>uV{iyM|#kgGl zLj7eKn3MbbeBTD*0A|8Te!iK&R0Ph&cM339eA3VND_|y`?9MNh-!8zko#N-K19Ppw+3chCaR)F@ ze#+0c*{RTr%T*u5cPKEm)BJo_0`sK6+3chK_Z48a{j{I26PObP&c;XedoD2F`i!6N zIbe49tUJHdU+x1;#~FUUHNe~`a5nph?`~k8{G6X}vold2xV-fNOzrc2zAJ%wQs8X% zQT@IG%*3<(djFn;)B5fQaQ}lBkI&7;ML!!Kt=}IG%pPCnI2&I9xTU~+U*K%-nV|Z}T{1qm{a4(4 zGk`k?n3FH%INNixD}Z|*nC{CsPI)dGs-hpY^V@)V>hc6(=Q#Q^*2^UMAJ^c2 z^MLuAz}cP`ZwFt~HRE%m*K$7FxdO`H&jlt@V=9+-koW>{&tB)YkN75C&oM5(9PHZ* zxV>)h^BpNLEGeWeGj4%|&Q`}v*~7#AOv z-`l{w`5iysp5Nsd7a!S|2X5Lee!fA0aq&@ooCsXyRzKfm0^{P_82)!FaCd&s&-a?Z zxcJDQCw?FO^lg5=0|ds$w+OgJxBK}{7Z@MkrNCYK13%xx0^{TRBXEDb!_T+F4>`ui z*9=_qoqoQez_|DtP#+%$?vr=<`MxDEE4*+-X-G08e1jfbp781Am(fHiP_xSlf zDljfS^5+G>E&H*b?@WPl@sU4Y3EY+U`uQFe7#APq_Z8q?xX;hG{rw!{<7)(N&!71D zmI;iHuLj&P5BT{m5f~RA`OD3~-SksG-?IYa;-h%_HgK;z=;xdKGmi1`%>-`mhx~j; z35<_#6>!J=+|Abkl1qSjR^Z}so%S9Z+V`9IFy^7Z;CwXRHTCC{aQ_H_aoI=yHw@g0 zN8I+c0CzDkPe?e^_<-tn(_iAe=&$^Ivw&G6;Y@tg-mV4a+F$$mo(5*eM-!ZluN#=| z#}b^W{3yRC0dt3hGx1S;`3o>_J?`iG@Dt;6WnA>5KTUj;-!B96y7Ixm9R9lmXXE=kFb_&N6Cc_4Z(t_=-p_XcFegYj8{ZAUeD66w-^;*!`1u59 z<2wSF6)z+>TYfJF<_QUB;-m80^bcr9fAsTp19PT?Gx1UTxC5AbU-a|615}b{% z49syaCpcSvzXr^+63)a&>)w<8g#Pl+e!gYETqNO4eB>`b1?I6={Cu0dIzHEl%hf(; zymmY=C;lbD+46f6Ft18DlYLab@Bi!gT+?fQz5!sakZ>kGvhP>GJpQ_$Z{i!{b6vPx z`6Yij0hmwyEy3CH`yF83kZ>mZh;R2dv2XBqKi|>7d{x4k_$a@>0Or?k`S~{b2i9Y8 zx$;YVYk>Lq+X>E=-y4DXvxKwRx9dO0=XQI?&36inS`5r%0%u!?n+E${24>fP`}qz5 z=9dCz*k~Kn+wd@+xq$L0%rDhZa!)shXHfJ_I|#f0CVvB z{Cs`De02vu-!Fh!xTBkI9_(8V%(r*)^F0sD@}1p$Ie18RIWLG!e0pR;I zFh82?=KCyS+24RU@%?_jbAfs218%<0Q*hjELhkdp=x1vmRKJ%4^Sdc-z6-(eo)1pQ zU5CrZ_d{U*v%8z`6p%FSfqKK`;-m7r514Tua`RF7?FY;q0%yxF@jU{}7JIq*D8G4N z9v3(l-=Bcl^CND)!$7bMm~ZaOakT$t>dzm9eRCTpzp|exzk7r4`@p?0(`_H+ckfvfa;M>IEh7q__WBfbZL zc~jtAd=v9%Z>@g5JTS)yoQv;7U`}cC^W6;0Zv@W9NAsiCfZ4F!&o>R2qXf>zNAr&w zFvrjF^IZ?jqXK8+qxyIWm{&Ude3R!+$Q^`>el|WjM{yJ|$9MYqt_S8(fwS?^eEKC| z{@vy0YdmN|ZW%6@eZ*G*=9Gi|d^ZF08-a7#_Zl!0y8V1Jf$0}G7vCyi&gk*;-44tP z0%zkR|9cyliM@Wl1ArM6I2#|W*BuYcxrg}q?g8c%fwS?EeH$)7d|Bw{YX_zxa5lcp zz;_BTXD#yc-3iP~0%zkRfBrWxI~?lgn+MD)fwS?E|D6HMrHA?X9tP%ZfwS>Zez#Zx z`ebC9QGaI=bH!2DuHwHodL}GNBa5h2j(?_ zbMZ|$3jWvU=W7S1B5*c7iqEG2bH>qrzT1I$LEv0`Zv(Sozn^a!Fh>cTi?0UE@dIu? z8V_9$%-;mg#kWauLT>AlpKmrWX9}E+kNo8_V6GqZ^Zf>xJ(hEvi*J8m=C1Jbtp(<8 zfwS>Z`*;+Xm&$&=osOB1E8%kWN0i^Sz?^ohpYImJ4Egyc0W*1}pKk#$Ulur9ey6~` zZvgYlil1+MbppPb;I@zYkA7f|ANKQI56s^L&SoFQ=S_~Ako#cG&vzIwmkFGU?`B{g z9`W;SSjTzx<4%~6+wS9jzAj+S6*wCo`SaDlJn#uW-#fs} zInkfrrNA6_lArHu!2C(zZ1z!pbDx}$n{=|DuLGE~1PoO&o@J0Tzq-(Re}4)1%AHY35<(xCivcW;e^~F7y0=< zB``j|+kkuhVn5#pzsxZ{z9WG#TryxPzA zMS*egkw523@$Wi6-*E!t;v@U60q%+G z{d}9=z%f3)*}#q5=;ymiU|f9Uf6oB7^-X@h*#hI@qxgIRaR2j7Ki?AqNAQ}H1lrt{+(K^4WKd1GGtAM%Ty9v&;|1kvl-wF)z(a*&9 zN8CU77VHz>>gLM>R}vWfmHkY7y<{J7fBT-BZvhzg`2K|4T3qzA?SIho3l{+M>D%0V zM*;UeV79xR<80$KIuE=TFuVT1%{L#oLx8zV;B59$`@I90H}CNC?fFB@8*$Ok#z*b< zJYar&r=Rcdz;xW@<|F%xz+7^-pYI`HcK(r@kJ|74z*O(?^IZELFn<;}n|;Lhu}4uKkNNo?1Lm~H-S!p1_iJEgJ?Z9aLzx{5%nbr(i!aoE z?*itpPjNom{`qa-oAET(hj7u4{xrqYGr_mdGZS*({|(34o+DiW`8|I-A$JZg`q}yq z+8?|dn0wbHI8*=eUU0l6FpLm?nCyEP_c#9?=3BVvXWO6dK-!ki!e4OF&-VNR#g|V2 z^UdFLoUQzb@9)5T>^V0d#lI3TUwPio_j_PI^n#mjZ}1%g%qRZf=9>olegw?l1Ez9w+C@|y>~p8~Vp%WnH#hJ8l@)A=Wkv$eN}!FM4rD_-F^ z+jHQZ;QKc)9j|hn&A#oyR{`eqzqsuqz6XJs^jAOM0l+MJ&Cho+FwY8{%|2RRoA~;K z-0pAq`G$bGS>RlJPXqJT-`sqMAioE`iS<8R^s}{JvhOZnp830#>Mv>5>End zU=u&zc>?3&qwk>J0Nh0r-F)OPKNT1s-wVJ!vZ6@+bFjuF8bN}H_Gn;z)arU z%}4QI0Wf8OL$fm0#~*Qj1en9O@bi5hm@5U&#z*CMBQO_l>F0Y8nBNPWjqg|B`!g_i zZRO_M2e{XPdH>cNXDdJIFZTncdmA_3J>WYDnAz{)xCZ>&q9w*z<2j-1aHul9ia zo51Y6liNP(FPnh*(9Ui?s*l4327hHglYQ%uQUh+mE^a=mk5hqpK;UfkLH+M*z)YXa z`RGqmeNg#*Tww55_A}Wx34G@Ocjf#2_B{&BP9NYnn|+&suN|1)-Q4z3e{{aU2=k2f zOZ9ORa9^L|wvYOwCk4jG_Zo07ebCMKQIPDk`$oA#anaAVUPAGz4ov4BZoZv?J6>Rj zkA9~5p!RzKaG%=K%}4qDj=&HX{Y-pMCO*pV-oS0Yx0{dbJ4j%Ni+(1)b+}&uuJt2sKB|uqfx%zd&&2m2QqBSH zh<*HgX98p+|4Zs&QyN?2JQoS zjO*Gsj>_4@_cU-<0CQqH$Jxs7|FCx+;8j%V{~r(~c7lkCs8JC+O9v4#2?-Dk5R*_v z!zHRMM(QL(PN_Fn#<@0ppKxpU{vgre*3 zdH(Zo`DSLm^Uf*ndC&Wvb7n^4dN0ArA7%44%OY=UI_4+gtQr$7Z$wFF>zc9Q^74?^ z{{Z^8anbT_g41n6xV)aoTL$O;1Eb}2FQ;58!sT^C-bR)9LzBYgslQy{aQM?~LG`hU zGmGIhO}6D_)0ZLeu5dWEwBY)cKlE>SuTF`UxA|0?6D4mHys^`wx^i5MGhxS zp2jzhfOkPGTHfCsPMAE|A!{b>s5)BSD2Edz?UmgbUltZKC-RE$^L{Dn1))Ly!6)#x zJG!&AX);>g{&4CRh0Bxwyy3B(tq#XW%Nqda;1j~-eSy3m;e2{hw7i{9X58$QaCsjh z?;|+>J}q3{GnCiHi#uB@_-V`L@2Y+eIlZ$r>x^)D8vk4BaEw6y3#t#rmyg1`{mgKA z#qd_a*?o!4!)*+dr}%e2ID4NJE^lvmRd5zNylmqK8jrmJ&e>;&%Tqk_h{NGevjyc> z@>almO=bXHN3Yj3YRyA1Z{aS?e{X9w?h_rvd`x%>ugF`Q#4o{!z_h^R`CQt3{Yapw`u=EnW8r-2@Uo?^l=KaGfbsDM zqvhQNXZoMR)0dCDE8x7jJX&72zc3EMPn-S^s$b2|ba<$ z^1g<1=|95dseP=1llRYPdF61vb$DV2v?|K^nXx(RUg}~=xj}XHC&$3cM6=ruZ7D~evgE6=j-9})L*{iaQM?~ zLFwy-yzk&`|3xGuwZZsvkzAQjq#|}Bx;T=^Xwq48CewV`;zn;y@R(?v~rEoS|KU!WT zoHrd_HhJ~P>%T#cb!q2ld8^rJym|cgEMRMXn8lm8P+9Q-l=fD%8iycylam2IKQa$_1GfEIXe%3FqWJ!{xn)yf@)IzE`xoAK*OQ zCtO}L^7i;$j&(6VZQ1H$3h8?aPVatgydZnJf&s88a0U*xdA*StRKNP<&22++ti*mc zPvf{j@($qm;Qeh5f0`{w-d?0{5xkr8ZLWHeAbDds{<*`kr3I(26Y};e$gv6vZF$+o zC+8rf1@FWY#h;;kRxT#a}p_FnQM@ zueLJB>M|)@o}QmBgmad|%Ql}Kzlyhd)#69g+48d0uk7u_FdwB=>1U)j?Qn`{n$nk}e)rO&G5ahr^#{3({xVm$TrVbyT>#8YDan zXV;@`9+w5`b1zQxgER4%aCy6P{YehTBrc1*6&$|}-r{7qyh3;ninGY(WvdVMzun;U zIyPLM(l^QB@Tb{=%1`M#2Hru(h0CjkcRHL;JiH)zE8*>QJpJkk;qtbIH_+kmr`dw! zX}v`$yrCyX%RAKJIN}29SMrX9*Kks_yk!n2OrF}?AK_hhaeQ-*& zyq>4poG^Jx-#~c1PK%Z|$>D^_Q~5Q(o3=Pw-eQLnCQtVCDtOnO9xd->hZ8362Tpzl z@8dI~<>j4ebE4!8g*R|Xw7gjkCraMY@D4vKTHZ|#CraKU@Rpw)E$=gj6D4n>a~Qum zH(K6MhZ81G_PGpR*?H0Oj&(R;^3*;qgm?D&(efT~IAQX>;N%K;PhSu%uj5ji6DCjk z+ymbBzmJwz=5WH~NuO)s)m#`Y?|g?7CQtdj1>O}GMaz56;e^Rk`aXpB-o?@KdR$_2 z!sID^{o(b#G+N#ihZ7~Q30}=*(eloBIAQXnf49K9W?8hnmmE%*JlW?@;H|toT3**H zY)+KCJ>d1YGFo1#!-xH(ej>lIAQXnf2-iFye3@U z;qba%iyy{MTQ>iyi1aOkv+6pVmn|MFLdG7~<45q*mMtEX{W~Ad`8R~i8-t7$aC+Tn z^RkVf_C;PHoaUQsUbc8p>shaII7*+kApc7GcQ?FiZVs212k#{~-#EN%2yfN^Sa2|7b+2qN8UIFLBKiKlJ)o)+q^}jvG zn#oUFHhIfAHxJI>JHpeac(oSJ|_v6dcW!4bF316+QRhUFgQ0y@O0nj;cWQ0Eic=Bm5*KFR5-k_e9VS( zQ9I<_3+L?!dAjenaCUhjy8QNmGuPpT<>NFs_e99keV>5ybp%i4xABuX*8cpoWxKC< z2g5nb&udOIf7W&IZiO@XAGSPwPcOeqetsVxZ#u`ne+u3|ZJypc5yWfY_J_p?Qukdz!Cj7qYe>(rmf8R`b(&x?Kjdi&8dk2GgE8+Bf)|Q!#*9CdE z!+FTzrP_xtA3FYl!{JY}nfB)6ZNZt3+rjG&ufucE`RxgBD|iDOuH8>(=C>8z!VGzt zda$+92XBMt?R#&)eo#Kn<#-{S7aZO$hLAT$DJ`RGkTgH7e%TMKeTo5na9PoW~)~mql@T#2`+#}VmbKhQCequK1{l;*%P3Jl7 zw~Z&ibr(2$MDV1i1L2f8yp+8+?W0XzH+VI07WjF-e8|2mhI5U>3(LoCaF(a@GV-DM zvB%*&>+rIrPx*Kk&U&xe#AP<@;RXGsK4 z<$NKWTO3|0AHMWyeEcCe|4Ek@s4ri_S^xDky~;?R%6W4*TRXheeSLbMa^4Hhn0D}{ z!&%_x`SQ^ld5huP?(o9O`F=Q0rt>oLp>lo!&MOf-mGj$hzIAxn@+;n^E9nRMX-n~Z z`Ph+jgWybZcwzaN0jDXQmywTL4bozqPeX)yExh{^{^i=?kd0x8VHj=lSxX z`q<))9BUtb+QRZN5>7=rFC!nCKRy`Fp$;$QHwC2cWH?tjyi`7X>C?R0AK^Uj@WRsf zI-LKe^D@#Wz5fr0>XpgWvB{5)U!^5BhtbBMzWOJ6OV1?jxN^c@T5G>4Ze z7hn3M2baOQuN}O9!ugM%=gY@XjhrM2D9x zzs63&xy8@(jLIlR<;eeFZ~auJ+c{k(wmJq+h{hZmN<_u+h-&dW%j z?D%@`RDu(suI7f_OFY znXR*XRZtve%j5q_cnODV>wTBPyu7^MjVdT9Eg3bgq+(n_<;XF^cB&dzF|uk>aru7z zhV<>bQ^5I>%Hr~Z$_eFFMa6{^M^}{=Pbx0muYUluytN@wH#c5dH?uj`yl}s9MKx7L z3mal{>#B>CJgz7z9#t^0w6e6MaM(_BTjo_aH79C(hsRY+8d+Xhjl{IqM^rA`q1`ZiAy|A^uKAxCfSl1A1u8X%!FJ6#njgx`VJA}!N&Gj`UbDJ8Q6Y=JtV|{Asnx~soPoJ4cWA|yCd8jqa8lKxBPv5!G{bzm5 zYC#9b)m1k)wlvO4tc`GaRbGwxIf}OL9GHBWqah(w~3+StF6%tW9#4tE)F#OVuou z1HRV;CE_!F`R0WEpVG1vZ_256ix!^YN8bGDF5%ky9a(EgRlpbpP zo-y=1(ACQ?_`Aqg4$C=~$4~f5NIBHBHr3Zv#}e`JvAJ2)gRv~nWRK*=YsMkb2s@V(Dv$0~bz{BZnb17&LPZRCTwFSoOJC%JOWm!REj6YTtl%_k0eR(5Zt~{F znrGKF;O6G$=B4;#9|xx{VHX{-LW8>7mb7|Ru)U9M_H_G~khrTUyqS#)GL&F3h4wd_ z+zs+gkpE0DPyNK20;@)Ej-4VOP+lA=kV=LWQ*FFC-eRf1OF8iZ(~dOSxlLt_Ev9+)<=}VbU~{adu8!88o4ZL$LS05Fp3Cj~ zX{>};x&r#b>OhV-2D~Qi&Z7|dPg~@+@K)kY zJ%Fp=^jek8v4)me^h2rga}{tiYoFX#Own0ZUkXk8-#Gj8v6|YSMfqx*;GDnK*)MkX zA9waAIr|?u`vuPaVA~j5TkLJit8(_cIr}F#`+udI)%}ieoW_36^>;h_{hj@ZPK-3b z+5e+&e_Pu=TJHJ2&b}*urSE*6Z3I*NgMItW&c1v7PPU~>@n`z>FZ1o+>Fm4L|17tJ zt-?wFuC}?b#yIi}nedo2@VbMrUTvu{R2|to@c--!GD3bfX{*tgU^9afzN|)fiHlY(6C+v<*vK}o(jGS zo&&xPE(PBL9|Bi_@>Jdfp9bFt*P{+T0%PFE;4F~3NEs_k>LB?cxGDH4m<#SjgQQN9eZcNu9k><9c$l>< zcr3URDDS2>xCGo4Tn_Szl_Xyjw)O)1&@lG~2Y}RNvH|Q5Hi3h|8^Iyq&EUSE-mY2* z%GDVK@@7nHG^n>CmVkQO-B@sa8u$TVAFvcG1<{RUD_90z2_6V)^=LV$)u9#O#`rM2 zf+Hzk<{)rCa5`8D9s(W$R)I%?G4N`z4*UanDEKNk2Yer_2e-sE;DO*>;1M8gGkFzw4|p?pFL*C_ zANV|YKllOo0Qdv=C@ANHPB6I<_ypJ+{0F!n_%tY&;2H23@LBKz@OkhK@I~-3@FnmW z@MUlX_zL&~xB}b~gZL`A6}S@Y1FixGfNz7t!FRzj@IPQB_zBnyehIdMUxQy_=X&vT zw<3=Bq%F|zn(dsuc^xeS)-+o)CjJO|bck`gs4L{mdwl(%^111$T2si8S!r9mnPWkNwc?rMCZzrI9`WH6UZ)$3HaG z-#^~e-+xKJfp{3+QLUk7C`d#8nk#UIg5(iPufF0?H-XWd1l@Ls(mb=!KI~6R96{JcZ4$K1bA=C<%!oy)xYR~1WTDNxM zmGkRb5=Pom1^v4^wPuerd8N$f@{RCw*mUo*%zNvw;>Adp@fL78}h z48&xIZI!u>xUc_iN^DKztd!a+;!l{Yag=1XO@Up(b;sJ5E15GOx@GODf-auJSyKNx zg;|8##irPLiQ-Dy261Iw!^Ebhcym1y#0him>D0Mc!)$Y|G(`SE7^oTB8D zIj4rz-KsNkZcA~whld+fOa&BEKfEqBwXEa0bcLx?Z!sk~+L*PN%I(WlOnr6d^t#dE zmEX4=&QeS*B*1w`u&!7VeZ{}IVu{_^sbIV4iYx_NmO7VNuua}`p2CvMzNvH31&MoM z&8NF(Gec-xx~b8(mioGyc(YMCjrMfn#C%hh_K6IwTWSkYDJ=i4t=v3X*W@{zr8o~G z8N+cl*(4}0_zJ(dm<#@G$Tjuo>J4 z|C_Oer2Oy%sJMDQxG%U6tOkz&7lVvFB<})`0>1?-I2pVFtOIWbo55Q^ z8OYngBzOmSDtIS&DR?({CwLF|ckqwkYv8@$Fxu;%K$*1r!O`FY;B@do@Mds1_!#&X z@GbBm@F(zLP;vGnpyKPlf|cN-;3N=7AvqWPCpaH`20R6P7Cak#9=r;C0sIH}BDey4 z8GIXD0e%O*3hsj4cnvHASAvSS-vBQJSAqWcv5XFDIyxX{S=*+4(&NW7NdGur{HSYW zXN0eAe0SmsL0wZ1R-XB)Ux6mn-#a7hM+Ogs}Zqqs!mnd$6r( zbXjI!u3}od=+gO8jRY-GT<3(TSpq0UmuJ|0<8LLpY{eO3Tf6A;d|QZ0VeO(zxnyh- z)XwPgW$2S}l-RV|Owr|$#9u6mipQFbpshJ{;%@GtjA5~pxpILmK-#qOTQ}m5EvReJ zxSoz$3UzUfx?A?q;6XY?y329O*mTizh+4Bq_c7c4S#G3DG-Wn7(rvO$ODfX6-`RH~ z-7W0Kn~HSzboSlI)%mViD$=cT{53byo$u_s{N3$pNkzIBJNs^=`>9=i*3nMnyOmuC zsmOPjZ@*zvJ3nqDY_F?V?CWmwL$$wz1B;#G@8avqMt^$cGO)UHks95-0P_giLpkm=4K+_wpXUD=FK*hoxLB+zIK*hrA zgNlVW0FMScgU^BVASNbeoHF?a`x}FwgT$}NeW}UKK;l)a3rJjObp?r^tSvzNduvPZ z9k4s7K5bi&v|ByFpTO-wje+KY{Hz_pK_GE)axAzrcnsJJR43FMTnz3CUJmXCJ^}6l z4yJ7P1P=uF2B(32Ky^a{!CG)I*bEK@PXvd77lZqPe*lMrkAnMwJE3VKK*hxQ;J)BU za12-sCcshPVsJEg6*vaG4=e$n1rGpMfyDL6ufTC&4#CBEum?B+)Le5pxDQwf#=uG7 zso-Sr4sZ&nIpwKfPYnJva7XYEa1XEwR6kM;4h3t#LU0y139JR{!8&jecqn*2I0w|1 z+v>ru!3I#HjI_#R4lU;}a66FksAL1!0xBkM1y2GOg6D!Ps7Wpdj|BCGm!rT>z@x#= zSXAmTxdTWYnz`p=!IA7A2TlZ!2WNvPflc7apv*aSoje*m9XuI41H2eq0^Sau1^x{@ z8(aaht{^#-7JV)#1AIPM3|;_E16gm7yb-(*d=$J0d;`1~`~kcK+zJbDDOdtt29|@% zK$+&Nz!~7x;Gy6(;L+f9;JM)S;Pv1Q;Dg|eAdgsBH-R0&Tfp7G+rfU|9pC`)9&jvp zA6N-K0L}vc3^sy)0T+P}fj58;gZF}uf)9a@fiHr82RmYs9tZaZp9BYkj29*6gU^8e z82e;8`X|vX%#_(y_Dzqm&!k+&`(kWeBl{(MeRX2&qQ+LHWlfN+d%7E{;%@&x$fitF z+iC@@{};)>xgh)J-%gNSVWvQTgF*H-blvR;vM2v`r*Jg^Q-I^Z78PV4WOBj8d*&4G z;aon`mLflY?Skyr+61*T$i^$Qy5Lo?$w^m`U1bvMotw-)g?lyE^|LQm>eoETUXOIh zyJ7n+2HA2@JKH^sib+$rH5tW}eF|5_w3~goifPS*?0E=!p-oUbgY0_T8n)j;klmGn ztiT&!bA#+UQ;@4Og?klOCu|`q&NUCRHKX4HAB#ERA zFc-WQ>`w*b`#Z3(^)b_ag~w*q%VVS0eCfZKu{QIPGxjlu0f^+LVCZNT2(&LGz$ zhk$#4{Njs}kb$AEtZOF+#Jj|DY9JRa;w z1DF7+8)2?J*#)cwdw`Qbt;3!I7J*a2sUYJI$-}^dK&``OZa%5E+a3ZcMxFucZDP#T zC%*@0f?9`N4UPxnU>vLiH9tHD)I4xKcsDo~dqjLD^r%QIflW zCxQEcCxd5zr-FJA>;$H53w1J-L+2c zpB`iHLVNZ<8?S3*zl1BJW9-x$OxmWgbw_tY!QAavi?G$f`WDI>zk!6T$MC8a%GOVq zd8pIH@+2$EKJhH@$XoO{D8Iv ziZ^3IU$L|7E;IE$kS(wOB&0Cdf#A9p=RG{;Nxd0u((4-V0Y>pea-*G=B&W1$muG!> zos99y%<5AHPZ&^dnB7{RqH9gCSrSX%M2-@%=0y5aa#|S1!xm;cd|P{=*k7Fey`14^ z7OR*|J)`HnEuYv&&HvI5+J=P$Yn5}H2gpp{$9kFMSsd#H{vO-~yd3NeJ^}6uz5(tI zz7H~%nB;jGYfms2z~6(6JtlcB!P*CW z6J%XZlIH@feZfu1%5ZQ;a6fP`I07sN_XjJ%1HhBPQjqmL)_9P0HWrgy8Exu!5p9a~ zUKwjcbdB1S@Qu}IQ=Va~-*BVq{EIg#o=LGDqWsu?!;NYLsnq5+s%6f;+o+^r+S(eG z{7G+{l79HxR0TRH-Khi@fD^$a$oP8lWN_krHf~<|SSnHPD8*BuJ zgFIuFJODfjWbK@FG`I*%f~;+`js^Yw)bq&gLfYJZO7Cvkn?2kn^SqAyu%fodA=2Kn zwSQmVYpe3}4=gC=-9Nk#$g!?1=0#!odhO2vUMarU{;ZayUj6o2m%@gwOJPISrLe*4 zQrMt%DQw`n6gFU83hTcvh4ovP!uncc*I5hLXC2BKx(;OxS%rmE! zbttRIM zfH-gG(}R2FC4XI`<+YSUyjS@9%xqVwe_X>0hpy>`L)P@d!E1Wqpf$a4 z;F?}IU`;RVzor-VThj~sT7%a}bM{%o>xQo3bwk$hy1{FB-JmtRZr~bTH((8~>%WHA z^;^U1Y#XhZX0*>n%dW{rUj@DuVxy1tnXt7n((dzRUVE%``0X)vIk_Kc+b+N!|ADwA z$vJl$NG5jhyoZ2yM-bPfznfRr?7#(=f~!LES`+8J!1025`yFU{Id9Uv4VcsRH@#8D zYi7N#kF84^ztWV#Q-q;xdaJAk!SwE}>ekFDsZF51ZBr%h6R4UTOCJwg&XEo5zESej zC!Rjg$SY%Hik{7WUzqy@V_N{Y%hO_@;cl*40Ol>DP z16!Je)%G$)s(~+_S~6R=JbRy&duH2{R|eSwU5d$hmMpcYK2+xiaHPgLo=3H+j&=eI zKoXN23+@6cMkldmE@xM8Is5348TZ-~{FHsvAo(5G2kb|Re+RaLeZj-Q{vhuiu?B(H zfR}Dz5V3-G^-qxvQ&c7gh`+(dkWYMoC@{?r-96~ z=zYUU=1;7HLFPBCDsVD517v=|nhCao)ga^eRvbJBoCRJ7)`D6uSqDA}&H%rH- zx!|W@1Naq)HYGbTr*jyncl5M?qd?Tutfy=RC$T>tJOW$@E(KX&k-QK*0=y193j7Cn z4EO<<fy*#_n~EIQWKELjRd9@V(ySTj!>~F1f`ROYa@s>p_nV*#c`| zyjah;FnXKXlm@jI)IsgSY>#iiyLI^M2~f#m4PHimX#*y2ZVLSQ)#EV}e6~{8NUqvq zYj}RsGh4W@q@gChpq*LHaNK3)csV-)+H8im43sW^8T`{JgQr2I_nCk)h^lk+&>G__ z18zSFfs5 zxpiYSe^s0J*GJX0#TcjbvID5P?ieuUxwdtEWO)8f`*vU2@=MlrCnvA#gG$l{0eOw8 z>$AD;fRMUADm+a< z)vjSB`}3&#`fb-{P98T0m6R?4d5o%K`o0Wb*V~?t3C|-LT(_0$&$rUz&v#cR-&=sH z+in5*j;h;Zxz7KrxVLUifx^LB_@Wo{{SE52l5eCm%&w1@G|Xxo7i;v=0DzgvT< zj%@<+8&%I2a9x>Cm%a78D7>D1nf>+aoabDO?cNSlo%0Te3||F5HDkW22gl^Q$Tz#5 zpa0nfT_a98zj@(h;P+KhUmfYfwE>&QJ4?AL86Ohag6K=DBDB&Wwa&rg!;SF>R$A2- za7`6snC&_GaHaowa9{8RkhsBm2`mF&29>v0K)){=RbE$eU5QU;yyZ1Nyu3Vp{W>Ws z1*$5l!rp`=thcaV{>;~FWHX}5={54Na(W$9Ijsa$PH%!Lr&XZJ>1}Xz%jpKL^ZP{J za#|2xPTqcUofOp8PC-4g3o%=&6HXOZyUOc5%0cDzKB)5g091K>2&%k32321F1y{Gc zF6TPGzw9lqh2iC;G8)y`Y+jts2ck5_65Rq*9^_^eP7Vp^)|CMT))cu~bpZPfNNy{p zc9qj-1!~koMfAn9BrHQmHldaALe}=^ZQ?Jn^hgW zjm@yP%s#3mo<7a4UMeHBaBqx|AY-MX5#>aRcXo4ZUR^@3AKy546OQdhyxG!N&v$@~ zWDVkwdb54r%Nex!jNN?unE796m;E9%PkmF0I6jGZ>v~Ytej~UKcoV2R-U|B5?K{R; z7+YY;n7!3<=Lw!~7k$U!1>P}k&wNUCbDR%GrA$-iSBsckF^d%1DEU?6#}yQ^ZXvZ` zE8kwnklrD1u&{`=3`cwK?3HEZr^4QI@N>5a!Dc>A7%L29Bt_!z1Ds%tjqr?&rYq;95K9t%d})%I(eB;DOSe+L=1Z5+cU z?eOV_1{joX>4x#g_-x3=MwO%)ayyJ(cY;wm`$;AFRnm=oe&)FG++qz0TB1FNau`zqw$?}?qz~e{oAToC|DK@!mA@xJ z#o~--CzpXwfy(ngL4W(YhvUkcn6o8@gVPrFzd3P z1C=k{pO{hif8uyp-QUUiiQcNosC)Z!NUK@>G6x5F#Rk^+nu>Pn`4-adj|-GvmCi1<( z`FaKPxADJlT=kr-572$4cq=5Mo<}k!)mm@&0#n-G4UAJ&AL5l9Sk-GGJ!S77CJ+9& zS@~93UBmA`k@cOHigjG$QUcf7*T(B+*S4AYM7k3A?Y#2f*8v`)G&-;nJcILZfU@sz zg39Y#;4iBKQ-4t%SWW5e)`1UKO9!U@dO9#~^>u*v;2Irx7nBaX2TBLt2c-kdVgJH9 zFzpxBfz_1WZXNh&wRB+GucreGR$m7`qK;+XJ_e-&JmYF~;1f_fz&D37bl@3|=ks&> zf@%FUj@|aX^ZPkB)oZac`+|kMlAZUen_ho)JA*V=GPpBX3-M0hFW=uk)}?%p=coLA z9IXRsi7-l#&xP*h79L@9(*7KY9O zrwewckWYcS+b^sON3MY`d{13V7kJh^DP8yxlrH=PN*8_x{rWlM(*?V8$frQv?HAUCqt-wdIx<%vU04s4E_4E=3+sc@g$+QzE=0u((QzSz8EY0S zM8}0|D%#P3<>c8vF6509K8@CaRNj6)=irz$=b$|?!iLnVe1na^Gr)~O`G=c;@(nfx zf5CcRO=I1T@qkplucqjB*86AeulHXuFj%zO_1=YgRlVnes`sv->U|4P_1+Eq1?zn^ z4fE>M`)Z1AXT5*k{(AovgMs5#yWY2=URCc~gR1v!K-D|%f;IKNE$FZJ7dgKhKX=pE zZ=q*y;AKvvjoW9$0`5|taeU322AbewiSg#_aiL2$D|7h_T_V1~e26+<&!9DUqmDp# z(7k*e+zsup=Rf`lmixwoRW616gkMDJM_{T<*WfMNPRO!1cgo;7CuCTycWY+MFKo)l zl41sZ`Mj>dO3fYRySD?C4}ZL{J^G+LvZg(G9GC~54ekh@2kr#=_2sw@mX+k3>*hS@ ziyiew?z6qMn4vE$@$(i}#K3VN+nz43NHo{g@KrylLPCW+i zv=^1jAaDve1iTR(3Vsgq4(?lAFdq$TSmQ=xJ zhPH2v%tG%?1C7itb7RNPxs81L*H@~n4 ze;lLq`unNT=z#Jt2Go3433xF$7F51?_9~;j@Q!yq50}!BpZn+?R&8rW^ggLczV@PP zw&fb(w~=KP*!`HdjcEm;?(J@_p0ZDiS?#`_H_968XCBAWngQ89J*~-CsqIeB+*M`n zKF7%yBQstt`cOyn#F`SN=Qy<%D#73B&xM`@=~_|j=R)OGc%S3klM7$xm|AgbLtR51 z??tOuH#>mg;JWH~%TV6IGbh&E*xFEImiDb`6EHqL-#iPd6@Plenr`0EIu}1s7orUA zBcdsLyNo(=H`R&s0(V2-TsPZD#;{ah#URydjRwoWF`#U633wuS0H{pyp2*}~;CS$1 zund&%cOdu*SOLBTP6TD2d1f%VCpZP%8=MLb1`h)F2M-1h1rGtWhG_=47>t4EgVo>_ z;4F~ux?8m%-)pxH1@8dofP5$2st3OT8$hkaY6SJ}rNcnI*Q^E11^Fg~dG}H)sOLcE zgL)2h0ayzj4ju*`3ATbqftP?sgM7b_57RT=11r7FX?MzYF)EBI?b$_wZ{3T2JHWW?CN;zrtInjP^$*Z zz)QgcLFJwd@58OGC6%ukxY% z>j#uymC=R#zHdjpdL*xlS{<8StC{OVlsR|uhE)j9%5?qnX=Y`%@2wWoER?nRQj?)oURMKsS0$u z{zoZGjW0Y;xmNh>h00rXw2a>mk$M%JgSAnxZuG*cYsEYYpG<4yp&@&XidHI`mB_j= zA$DrH(zqynRKEQBcrf~=ydDCc3|4_^Ycs%QAm1d)(8q^3E`8JlsW!hpuHx8SZ_Q`u zH0f-+Bpy+&sG?+Sa`t=u;$r z9H9L9^{56tQJ&-Ancyt&DsVQaa;OFUc8&LDnl+uBIInH&@ASTnwr67WPIAA^*ENIS z3V(_&TUt+Q_{kKkViR|B?J4^#6Id75+I)$>I70k;&=u0LDfQ<<&kIZaEf9Zb6Tdh@ z{DEZjUfKqmYU+6CuhE>lTRfqaFaevlD7S*mmk6{e?MFrkuYtb#`i3sy3FvQT7rqB< zLOEA>eSmN`c+_JQg@(zS{ZUza;7PVc@sYc!UCXxUc?!i*+Wx_N)z#*o0>^_-gN@+7 z!1>^_pnT-#z>B~a!JENHP%kNgj9~j(PX>=isjFe+ljbehub> z-++2c(zoD2;CG<3?R!w~!u}Dw0sINP3ABjq_*T5N9{3ozKFBxPtqnlF#ct(*AAlQz zQmc)@9%#U(;3#l2umz-=lYHk+UlK}Q1$G7bex21F$}b+rS?w-Bs6@Jw(=@KJCl@MmymQ11Zh1xmGc1-XZ{8;A^RPjDc(7bs=w z0}@wTeZkwnejsbQtn$6fva*+JPQR+9mB4?D!>rBi;V-M&-4TpYZ3% zzSDbq({*}_iCT5Gbvs?ACw4WkrHKMf69mqeDgA!`V;B4j<&9p7M72`=-a#{fKo=^ClzEasBXuk=!D|x;xljIo z*p-lHW&xg$9X#9ng{cQU&0~Lc^BNN+4F%?4H`41lSZJ=)c>FZfkPk9CYM3#Gr~LZ$ zuo*p58PGQ+&jAzQbzm!~a+wGE_3%NCOAmASY4hu07xeHruL5M)q`TTgIYx+NXg=GU!G=+;r*YR%BCF^o6G+hg7Q#4L8r^Ol8vRpZgB zG}R8&D!=5cR?SarXA&HJ(pmt2zp3(5nad~a6sb?X`~Mo&OwYJu?M5~8Zj+QXvkw;9 z2e(59mGZv)T3h1f@mcZactdsEoGnNVCB`szwW@1l?)>_wa`5ZpBJ@pVb1b+NJPuS0 zc08!^Isx?S@H9|mu^9C0S(I-V-KS#m z;+6C3S`zKCeL>`Q7@v0asX?-{TEHN3yAtB)-G`K?|2=YEzixv_y$eXeZ^I61ou<0o zS`1w^l^ba1f_ys06^#BZ0p-)3<>=kn;En8`1N!wZ%BRy?ywglgM!y?Sj@doBAaX{v z`^^p7cT%La3zEEc+LxIONB1;-;nzK{Kezt>TK59&UZ7fK*tH;k?tJt{c8zf=q;5<;|8yvmlLUHfvNbltlTWQdfwPo-LP}8(AqiO+bcESwDkLY z3XNq78!?4^K0eDhOOVfZDLN^gy$oCmE(7KBT@K3Uy8`sN| zM8^L+{ePsfL5XqnHE68G>kD@NU+b$qwj!54Llr$9VUQ}ejkTn!Vut+;@(Zs<*QATr zfbt8k1?3lB2g)zJ9`x&Cl>HotE}rLAfiPXHXlf>4T1_jOaZx*smvxahS%Hy>$1G*s zr9Bokzw93!^XS6<9ztLgGciX`1V*sA1_1S{Ihs^?^^V` zgMCu7Dw~hjp1Y%I_Vcx0gZ_8%sN7W6xANO0QrFV&{!3awJw?-nG-(1QwxF&>agUC< zb9VNzLNki3Wasm1jw|F9DhHoeEY{6A40EG77v3LfRBJTfqw;6 zK97Q*g7Z2`*E;7;?X73#$|jVIuk3IBuNpaFd_`q>0SBrorgtNJa*~n3+0GHN zku|!wAX7wlYm?jr*|xWtiSe<9aj}*;Jff9;oP`m35^141*%g^@Zl_Di#!RgmRXU-d zl35D-SO;^gXu`z8(qbm4?1LT6K}xQ8ba6RVZ6Bq0xx8Y`g!0PNvGvWdi6h4pl(P=5 zb8dt5B>8h;W!3nJrKMG61tsOyE*$@9Pu<>BN!93*ab*P~Rk-8ICQKY(gvbKwXLpCz z!AGksFBw-{F~(*gk-MwHC9z`|)yji){vbW>RxzP;67?~$qPS{uLHW3fN`z4OCck1> z9UMkQ$+#ku-fMT`phY$+iVvJvJifA|ptOo)Pb@`*&E+cT-^ayT0O-y5m;w^3+*>3zF=I*$cn1T6Us}A7%8wR9d)mwl8TY##g!SPo{%=~&&{mD2~*s1 zD4#H8s?lrRMQ1x$lvKg^(cHuoXjNH?A_3p*ZUi_wT~$~x@_?$c(t`2Dmh@Iln5JI<0h6?me802Y0?1EHnK(*lvPX&C>do^s zD%35<9bkAHy+?>k$)mN7sw|vPBvXT3@KD_Q>}-{cpHzT?W-xYj^4`lDS1_fjuzW&6 zQ5o$~#vX;PD48(c^aT~X>NqF&gdwbTOBB@C&2EU-@HNrK>KO0k9zHW+KN%2fDr|0y z)il+{TH?cowH+;MZd|Z1Z;!qD4IaU2uAJO)*~C;XY>L;kc`=gFwx^YA{fvw~kn!E% zz@)S`w3x)@v7*Uvw}snz08fill~-1l6q2%$^|6)~d)appCqM8CvR~Y8PPR8!BUm_{ zlY8LyEMnAp@_3CNTC&CO&WV4a$EhOoibr><3MY-JDk`Wf7-8)N^%0YjF|n3fKHS9Z z^_LzGZkWB7XQ5Tz9wYb!Xio0ZowEp@nJAh$FEPHcCZ1QVk#b$IB^R7zN}Xp6OghcF z{N5Zsc&Ox1%>HS^qQ=&l^>M?~{SMk8>-`RFoc`&2F(&eVhKyBdtx7s%vA-ZmLc7sa)O+=B6)IH0-@$f7cK9rm7{VzI#>07qHl^ zaA6|eQq^y;H4OUY-s*2lh*vnZ>UqPAqsMt%dp4DBiZ1Yt2fbkQqW0ai=y^eXh1XVs zQoHTYhv(!j#>GWP@DnTM$Ky={%yS?OvHIa&Z63ix%Q?A^k-KQ>uwi3j4K?*~qbN_e z^OE8k7Ewqe7L({+Rcebx@s{f5x+dCqTG90%%7;>Na%b6sGp#{cyt#!L=y*e7T&$sP zR%3mQQ)t_8)yDV{xudt#sq_ZGhi~@sYQ+eX#GM94Byr#%mW$@(mf~EQ zC(z<`SdS{EjasV{__aB?FYc;)d4?X_42`ub=Lcs~Iwg+^GWxcoZoxC-QiA&Wx)xO2 zuH8}fjj@DjI^Cgk!=s^9F62W#b=56A+g@Ko-m?%ZgD>X*NzTm=^M9r{atqrl}g;ld!8_fCPHO7SOm9EBp z5c+nO3udX@e0;t=l)HdZF*m3hUsrDo?nkbKTIyrCxo!mER8H=C43#zT*f(EMs!ABU zdU)#M!p6pWM+t@-aq$J!ao+LM*iZ$1geCnP-PO6(%vcTf!Z~jgzLR^(m(BXdhS_<6 zd6j~E@20e>ur9&MjChqvvdy>ed8#Wobw8!YSnU<5t0yFy)f-=>In9AuT9;J?~&)^ZsHy`7kKhyH@OYn)9Kkr<0)ky zxc5!xIW?sFAM8ppX_ps4D4vsBm?uT^t>HFpNV-`?G-h{G<{8sz_~1FYAMLG!-tNcK zX-VU^*-HfH4J_tDV_Wr#CzI#6w?#D3)0V~RXcN`7ag(HXjDc4JavDvlxyWoE=54Cp zu02!V$9bvVUWTWWD_UnJn&ak!jizbK1YZ6XJjZXf7AqP{5 z&iuXYCaESL-O4_bW<{m(O-Pl4HF8H03MW=o@Y0?7_=0|k#(|~?4(=aO1OtbfhV-Vf zmR|KThwDvh-NW+T2u^cyA2(LdJ#0VLER(%mx-~Rf*em_muwmt~h1IbZ{4C64UoM)q zt#WR*0G$m^JJXy`$nbqnokvG zL3~bbyqmH#vbMEhj`1&jDp7J%NAn$Fc*9@d9 zg7cVoD)Xu;RY`&|h!%Y7ss#R+B?tGS6 zzhhMJOoFD+?DrqSXi!eBp1hrD#}sz#!yryh?y1Jh^Tl(i%o)d`+SJULv~Wk>o~x*; z=)9dIyeK{^#$)&?A1lKL84UII9-;NV|t3uv@p7g9Qi5noTsFQ}j0*j$&WojcNe1aK72lPSWz(=3w-+B{*1 zB{%AF)Bj}_p+~wgT~a1>vCkSqMDY=@xIu<(+vF@)n%19Y^NJT3XSt_QkFv)4g|+dT z=2*Qg!M;*C>Vplo11=L>kEx3{$C|5a7q-O@My2-6R-3cxX1AK*?*_xmi!$k`wv6=K zCRroBZ`e0gy2QQ@y>qGUZ&*<6Sqi}PHOnUQ!xDz`jQcvUXQ8B-`9v#mx_uvHtjRo3=B0z zIxDI}8Q9PGl@D#{$)49j;dqX)25{fkgUua-u?J2pVAyvW<7XPzNSXglxo8;ONLAI` zengHk$~&-IUtd!<4-Z{Ez_X@vPc_q2i!eQZ7vmZf)wMLm5;$h|mp!F*8wZ>iHq0fO zcBCHh4CCXeaN{+O8<+0sNjo0IJ4pA%Y~Mr{uAbCl%{4YmV+6v$m~T&-}^W!S2F`DUjF+jLK}Pq%cbZg~5ydgEGr zK@%U;i`S$AHRBKJ8Jm=^EJw)P(!5SV_VvlEr-u#0X3XV+40lkuek$d9ww0Cf6R$H$ zZ?{C-qU$k4GsToL`r%}#Bn<1FgSl`N%CNguU7>~l&s;oUZ zbFsOt?@Z<(WPd}xuzloyrm=oy{PgI?I?&WaZ@c&Ly*Dy7oN$wE_Pig`GP%{fj9WtE z~1CE6vHXjfC{(XmT%oIu|=Wk|<_Y9Ur;J*lGmY_!CRaRROICty05L zQ~slI9LF^(^-=xJzyXFg)m$BL2ixt$d9mH=&yB?y&mcrwI4P4oCVa?t z*szw0#GLVE6(h{ZGEea%(%H_V%9BOv60X_-^K* zu>PKgsko#p$|)Q$z?Acy9!JBrbNh02%MefJ;#IJa{1|PM?=r|Jvh8_{abN4#HauW@ zkm9*biG}w43bCtA=ZrKCu;bjiz%?$lt+BzqXNjxlA1!PC#H%+AC|3DIq% zn+>L(T^}_y9HY2schidfc{km-fAm_ad`?s$^xMY_1ShigwTdYnH%~Ft2DwT;UVjZE zyfvm4wK3b-D(RVRi6JcY&WWKYsiExscO=c$dzW8 zPr`Nz?kyUxo19)a_UP`N#-6rWQrm|y zE%9ojvuf9EZ8Tk3`L2icxNP`(DG`;_K{#^+3wQy%A2n~7AxXwGKGV19jL zOWZs%NMPu@N=<8v;Hyj=>7#3Mk4_wIN>A;uVVd!BB1iigC0eLf zpLm5}t$~+}wDXX8iBdE>@RCffW_}I~r48Z9{(Jpk^TnWHsYdq`5x0{jcvps z8WoS%q~?9j+fvCfK4QFiVqJ}i1Wyh~PMbK5@vOi`5%y_?jee{g8(%SMLixC=kp&~i z6q_-O8q*DCSRxW&Opol?CB_YrGgepa`B1jTzKTpMmfA42b94K%)HfBV-ASs_y2hEUvrI88H=ThyonWpUSzE{SsOAKAHENme zevp>EkYYiMqllRtihnU^^RCxi~BIXLESap7vMk5faNyRMBnlaJz$k4RJac&0o0-%&#wAzB=GlDH8TTgrp(EY{`Wb6+-qv;@JL5Q>F$eXPbF-ao8=8tY z+Y4c&N-+}?RcJIG-ELc&BQNKA(>j8kB(?ZInEX}X6fybc^r;$78(@q}=9(=A%V zjY%C<$I8C8LNVs0+BGA#4KY&XK)w~G_llpj4pJS?vDwFcQ**N;OhxZ+`tY=RGq+Q* z49!+7DcyGlgYC{krM|tl)YGdnH4Q71D|>dEX__d+mfzm2I=4f_lNkV1dfv%&6N2 z>Aute2feI`-adD{R_|PB#*Cl*vC?3t$)2W8>2M`oRA6spyrzP-GzD#Uj z6^;57kByPLwGw|hwZNk-{E{=bnK3iz?y)^O=Zyl@jOAx+Ya1)?Xs=0vYW4Qu9L_R} z@no#j4Da>UUAoQ4nEJHc^V1@gcpsCryV54QQ)5BKCz~8KKtgmQJy;ldufE17nGu{- zZ}e-bRAoQUcpcu}zmj!YmWJncG)6IFHqq(WWZO%O#g3SFF_HT?!^|4qn>gvXbPL(0 z2yzquZQMN+Cw*qyRIkqe*L3TFNiqG{NtB&$xvvSEt_$wRjO}zc#F^TETQ1cnA+Bbo!8#J}eBDl+AO$0bR z-H9-3el9YDmFiR7p^Ls|IMk;jrWF2TVgNU@P7t8d+Br4vYGR&`Q)?oI4J%=+j2B7C zvwY2acrwdS7&K6z^|<%AvA)bF>VgM6Cp29(vUI#TewXh!(^%%dH)R|*hp+S>9&blx zsG>dKnhJ>(z@HH|daL<$yW{ESZIvlEQvt+0}soI!4&+@8_k(Si6C;d&(TAHo?d=b+KW8~K}y={7vqzZiVR<_RkY&@t`=IoL& zp6ow@&M-9HP}kC!Xl`t(s~*J*sWd%dNAofsPXu4%6E9tAF%iJuBlxytY4GqN9u4-o zkC_VxjcHQ!v(S`-S zSH(QN>C`_k{zYY+p*k(AV?~0#XUUQ~MHssWcy~^>;+a}8S15&wWbA$~&=(GRB4>md zq2DK{XKCwq<)PkYYylps)(UGDBeft-p4XkhafQ3`$ta_i-Rx^GyiH#vX9g`hQ|sLmjxo0RGHc4) zl*}H}8jR?iY~DcdC}qlbd=0bku)!9TKQ%3g9i8HE`e zt8Sc$*(+{HG%qw0GcOqTKptO~g@CeWo12o%m|;?z?aJu~(rd`1@Ca|$>P=zFSUAnp zq)@@w+uo?oQ_Bi1&NmIx=s8kX$HBjgGm`ftpmF;4Q~&jl_iN zvL|X|Gq|FvjK}-s=Duc<<VOxDQ{JSv+(^GpGiRTxc`?cd+%cFG0tsF^~)W!a)>$0;#l6izf5 z`@r}N-R?xG<#bH>hZlud>cl#eim?j|RxnG3R=^lH%OVpE>>I-Eck zQJz(;(eX_0!Q5s$qohuawAno@g5#SR=fN0VPb(p+wflDU8=C}+NR4>4>6;@`!PaBh zw9a^-_CqKs1#ZsfhM6XLmGQp=mC9=)WZd2`PNs1`S&vj%S3M^cVam-MLpyUGlp=sN z4@$|J|2trm(ewsJEmS~y(M4PFj7MGP#q9t=E$s8`V>fN~Q=Q(1h;iLqMgz>#cpA3r z($`}%+bSvZB>|?y3Y8#}(ZDi^oCj3bAv^Svr-Ngz!TN&V@=f%@6uw*2VdvRPSA2cj z`9+@}a``upU%bgzq|h86e(=nx*R0s6WWkYVU0phP(RG$}yE*>+TTP{JT)Ftezi;t= zkE0(r=YC#3f}k!Px;-@D)OoKr{(HonInVuby$z5PH^)!?>y%^vUDSJns_(A8=j#bO zl=H4lbNrI654q<2?!Djp?ynEWPVBJ3c+2|89Do0c10U$R#hq_9Ub6jOyWX(sA{u%} z$-nQeq7(N$ezPmz*uJ!E<6Vz_j`zfx2D_jBaRc8KTTgNZ?7YSB|Hs~$z*SYP{eP*bw4uPl(z3$YO3eXhD@0F` zNr8$}q@tiWAqq~Vr5;F*$K$n<@|KpBm6f-w%+$2ND6Oopye0SQ4NFUs%97N~>i>J5 zwf1v1gQj5p-}n7oKXv%--(K^))?RzURBg_ExRaP`pG!Kp6FXpSZty zcYH4_fZUJH>73nkY%QOA*NBtv2fbStXE3vVqJH50Q+BPN**$bXUcDbjuE%$jSdUn8 z;H7R~4e5Nzf!Qy0ygBh1{tg=48PN6c-YFATMAlEfqH&YXSwHc&!J%hdxbCuB`|m5f zy`}H=A19r}XnSXE^7pb1-(ECg@51L(UhnYf#vuc~#&^u>kiIGVr=y=_T=@LA8@k1H zn_1w(cTHFyxXSzds`(>kk6Y;3H|+Y*Rrnqq>j|yz3qIOyXS4c!O1d5Hes40qdxSWI z)@ayP)%^68n(y~cd9`nw1OL1U2eq=^Yh=InU)=fCsBfa~c&xbl;Q9D!AnSMK{?Kk= z=D^Lx&;8u-gTM)>dYuE=okho`F4k}QX~47ZJ^n`abNk+& z^3MB@zl!hgvHs4$xl^uqti!G*pB`O1BrWANd>8IKawm1-)i3v`Kl9V{#%GTggzvg*@y5;VcU}{KO7Ju5S;ODF z_OT0Ijof~;<&L^FY9b91EOP(-j=eAWbo1*A9*Ju9!^ORBou||)t$&kva_xJ?AB~@S z@9i1ywn4o(#QJ$}HmUvfz6UxkUGdDlYuzhuMtp&{350 zxvU@f?AC>oYE2#d@7A*xHyT{~XOsul!>mOG1?j^cY8^85`PYAY5Bb#-bv3lczNd=X zUf{hWDy`=WAFsYS4e9V0>opd9zAYh%TWPWvm4-;q0U{)f-U{m|*5k4umz16WUfIsfigYCONTc5aIa-P=wWsnm0<*Ikd)vLTY{3&L_YQw*HqJU_{oOY&JRCLc?c4Uf`}3xkhs>IebJj5Q z4Xx3)DDLPRR}J0RwASOj9{aX%j#9U?UUGiu$-fu$x_Nrgm7jL&W!;T40$ERAU2wxq zeXl9H>BmDk=biuD-|#&{#4WVO@|P|<&v)pTYoD9EM?9I4+Wxl>^1r_3 z>f`t(59^Pl?%eZAvir-q@78-K=#eo4@jXh`cVG6}m*Ymgx@5mfNZYgYPMB{JM(*77 z>kA#{{QB7Id*A5SCv4YSbMb8+*5B$MzWJfAo;f!BqVImcyydoII0KROj_aGW?KtK7 zSLRMiJyf*rz-P#>`s7Z*4J($u`@QSBmmm1Ym#>U`x}{P#vOemmYu0~rQSBb@fBpL; zHSMYEaP~aw|JwUn!pHsNUVOIy^^tYPCByuetnV4~QSi!-`|NE!*jLcz5--}-&KHyW zZ@wBH^~(n>RN)NY1CJgWovxIR^<^Vp-v9Uclcu#v{P(?WM-`zhp|!uz8hc(kGUL^M zUOGHhW$%p2U3MS7OL+FxpSnA8mAPWay~h zE;;{!$*TL@VQ@PFqpr{zbsk8+XK_-~W5MP$tsnIhzITaPS!j*hT8#YW(F?aPX*s;*u2u^V zWGa=-dPd~NN%byIz2)i;UzmTQus+<_&-(i-UwvUpr-+rEo;p0BOXT^(m5M|i3$1a@ zNB8}6P~(wfmz}WO?~Fe9l2Wg*UhliwCGYHdutD}E3mVV6<$3f`Ke3)4e@o_=Q9%Wt ztxVc)wQrBIa|4zPa29Uw`mSMp@BZbwI$!_xP}u8}@og2>x6dePF@N%N=Vw1szh%P# z&!D~+vp#Uq;pPWd|1)&hhn+VM8$cgqjlkM|XpOe}o;-YSZp4lI-2Fd0@q1hp>JjTV z7PPGOT}GX+I-QvF-Q%D2$w7a|`p4IHoYDXM5hHWk6kIrbz-zyt9^ug?`rlu>)%bN| z&DIH@-QTT456=_$PzUSrTQ7_n@o1~_TcnOE{W0e8?{Ow5>*G%Byne}*sk=A*7&|R4 z=#m7ufj%R&M&l7}9&G#FC)2+hp7GlSuhz&$JHz^hqqBc|@aIqW56-+JCv0Z+N}OlQ z`g@Cp)^66q_t3pFJACx|l#fQ^ds*S+&ShJ!jBhw(yLZ{A`?qZVG!N}hBI`rH7_@N3 z$fxTq>ip%SpElk%2j}0izW#x(Q+9^7ofdadhn^p77>4w@uraxlcV*pzNjKjA%krz@ z0kV_CU-NXAwGrz+zvsfI`d!~qsn=P*G815b-wrCkE4IT zvs^1o>EEzXn9F>_f)^xS6=?0CwNK{#+j`DG9>8MJNMVVBCyq# zy07MDe24GIwjg&r4Q3sPYu)JDsfo3$S!?nU9(qSHw8o^HE=zvy{Ocwj&l$Az%7vfo z#CLpIPfs3DcwfDlEk0}h^9*;cIJ7a@qGf; zhu%76*wNn>-*R>HyQ23Njrs@G@UhJ#)EUZO}KO9-!TzsMeYpWyZ*-J z+4V>7`03l99(JF<2xrr?K59mHEMmZSQ|YCmx+( zePi-~TPHj;cf#WDnw@;$AldJ2LH~rt9C$f8nA0#gE2*f&P*8%hnIb z?LD^3+N7t~&1(A2;ZA6;t|9Y}ENQa%>&5LBsi@T}uDqfB&o~>O^>zpDe&e1-h27Tf z^1Bf4}+7=?Gyk~7SoHXYh_?a*dwhc4|R64IxRHtJ}5Nhm=m z$-K^-Fe*bdJUhfgXnH!_Hl?Z_jKxZJ;%EdX!%#XsQ>eOo5;%4z9qwkBcXq1eaFRI# z3khL=!zGg2Kb@JKklEt($Q zYG&8YS0&&OuBnsLCy&VppFS>qTH?g;^o(gq<0gl3rT|)m;|% z9PK$$fKIECTgV>&lj5p-Re2;P>%;u$K#Mf2tfC6=aeim+O__p_sCPY09yJ~{F_BJ{ z(+*XqOkhvrnTJN#NlCg>0MwR6XpK`{7sd*iG*-JX=vw7A=5)bDrKI<8s}$5q+^uXZ zrw6n%^l`H1vh3OY_t}rT%a0InaQ4*6Gx*a9{z#3=KmjpFsZTOTsaHMtr|`mdIE~JQ zICIy_)M{Bdn1-Wd&)khao`UnjMu+n4_POh${rxBUf|+MA$1D?lGjGD=OP}h0wkhDx zaUrSAb`hg3B{E4rlLROeLRpzI3nbO)`6eY#nmo12Nrgi-sgQIy+cc8KXu3WP2?H$5 zPia4y5wwHViCFp!`Z8+9n6~3mC!Sp+UrFFhs7x4>&w61>N1x`f9E^is~B*=agPkk!dv%tt4V8+9(@Um@z%3Eo6H zSnQk*zb4~@5|ij_IA>Q5%av-$_EV2%s-C9)UQfJ1b6T}#rF{7p7aak&hZrcZD7#e; z_bEm&@QL5M^LuUHyQ{)@wM;8Hi4O{;@wAz^SEr<5v8TOmT&lYml{^WvD2xlLK5g_5 zsO0e*q-6R$2^OyHDZb9AYQ?#1NUP&iS(mEUGTUP+Za$N%F&p(a_M<0`OH0E6>0|9K z@k~Nkrm&4QlftSDp{3+kG95&jOT*z(N$0AskbVgLo5RiOg00|Ha$W|E0vOJY8#^wkdQZBf97tmPX-Qz-a;Z}6C76z} zt?7MuIpl162uVbNQFwN*I|W;E3}?=~6xfz4+pmCiCw*i``3AEJ&Wk??cXbxor0nTL#C(~C2{IAd!(g)3M{` z+$1*Dz9iH?YR#%J7cO78B{%Ipj*7NkhvHwkpJ;#5>KtT)!!LRWrQhd0mp=KcrMQZC z30FBTr)zKcSxX20t$M3-IuFL1(+}`oGcVOQ8`v(qS@Ni~@aynrTv|9?M}%J!KAZ*U zBv#9A4&AH|E_Pu4OrJYf66MZ+MVz~Kv!f?z-L+e# zX?>QZN$1;NlX&ea zROY4hRo|%&m6n~Vg{smDP$j1-CST>LcTUQ9^%GJ0nd&>$p^}1g&RSh@y!zp6-_9;L zQo`Gx!(v%^lUB8|WVe`QB7IIu4x+B>d*=$dR(W4}j(xRbCRy-Tw9*~AoV$816-Q$5 z=MK+w7tpEFZl+3wOPrDjbUJsb)4pAW4E9$$yhiy0{tv|ebyUB4$#{2s2l#!Q4N+H} z1l7lB3PF5m43VX7s-e`ytleVBQky|!BS_^MveZu?ZTDwGmb$2>Qp<4~LXf(|kfqvz zwA~0pmYNCL!6C>u6r{ErvQ%g-r5bVw!VFpJN>BsVni{fHThJw}bueV9u^@6eNKG(g zsg=(|Wk>NP`_YF!&ATd>y7kfojiMX~m*Axm9R zN2y+{H8F(r1Ceh?KSP%K4W#|8Syz*#T7ep~-PVRI)dkdqwH}5nbtC99*7_Qbswk$YdMCHlAw;Ptukb(7eNuMy<*5x zZ-6?nw$+fOJ^*!QZKoki?E!URjn0E0veY3^SJu8aWT_LNZmj)g$WrH_NOx!Ld_$IM z0P4Y7BSV&I3F^t(HHIucvF19~x z=yKMk8nVLzcP=o;3p zH)N^4pw_J2Y6$fMq|5!YhAeeHPSw#`JwujSE!rB<3Psy1+88uc+U|Hmh_7hHqFoql zo4eSMrFx5YlW2=YyI-_I(e{cq1a(*Yn_$RN`$an_+7&n{N1JP6$Wrf!_MT`*MLQu{ zixAuH)rKrJShU+k+b7xq(E^d~+TUP9mbzWE5u!aH+C!o}DcUoly&~FcqP->BHqky2 z?K9E76zyx#j)-Pi(LNLHOVPd-?TBc{M5~2<)})^yq@QS) zh}KlJmZEhOt&3>AMY~C~0iq2SZM0}(MN1cLhG=fl7KrwMXb*|@q-f8G_KIk)iT0Lg z+eG_Bw9iEQQnar{J0jXK(P~{J>1PP(C)y>VH5IL;Xgx)X6fF~{1bv8>psp$~6r^?; zvQ$(L2y2H7 zp~nFYW$lC^OV!5Ma~Nyq8M0Iuh+3*3)xeOYnt~EoYiY<*9YA-m*4dDydVz+s<}zfd zSP->$L295OON{`HWNow|^w^+8)}|V=)Ev+#*5(Nto>dyqP5 z$WqO54wTleGK6#%ZK`OiL|ZM|*P5Jt$N<%sq#(f%V^aJX$Z)DX&$Xpf0jB-(z_ zu4-)CZDR=KS+vojWr~(9+EUS$iMC3#)uOEvZG&j}qHPy#muS01+b`Nd(Mm--E?Phn zJ05|CQ1?Y^AX+ogT8S1RT36Bfh(?FY>#{LWv>~D;iIyVTY|-Y5mfu3DkGS;?ZK)|p zg&DHc6wr9C0n-dwYAz^)HTsM;k){3yn#S4#hAj0cXgX_87_!tqKr>i-$q?p;pjoVaWXMwg0^P|Pofb}HsbbJwtbJ<;H54?PwUdT0=5K{l16d0)WT}fmce8e> zA=G5hJ*-`2$WjrYxvX_HgfTT}9&0xlvQ&T2eAWgTvQ#3-&04Y{OQnG_S<5hlITI+0 zHTq67k);-c?q%(MLzY?rTEN=lhAg!Pl+D^&Lza3SITpgto1fz zsaru$vew^_rS1T&VlB~-r6z)&VlB;(rS1Yf&DuSNEJfc~c!ssbhAj1W&}!CJ7{Uq= z=vmg*7_!uBpyyb7-4Iq&K+m)Go*_&96SRi4LPJ=c0sVuugN7`11oQ%H#|&AjW>=+N zWUY=NjGsYkS*vfzQsJPNSZij;QrCiBX04+kOI;6og*EzA0TEhn&^p%Q3|T4x^eSs3 z4OwaeXgzE6@ev|R-3fY)wYv>j$^+WKn$M7>mVq8&ZMh*!Jp+1}wdW0CWfAlMYwHbR zWf8QLwQYv5vIxpyZMPwmQ_zE~6&u1l5A+agCk$bf(M_pktOXgu$|C6RtTi%(-WfzS zB}lz#2)(XoC8D+OZky|52%U%^tRUZ49C36fIq}4Wexp z?K{za6s=89+r9RNEHz!UJ4LI1oo%k6A*?WqHbk@)qCGC!N1}Zq+VJab_eL4A)RUq; zBU*`Qhed00gKf8kA*^hRHdeG3M0;7ZPel7nv@b>bTC^jg9TTlqr0s8ALs)eY?Gn+N ziq=xJj-quDt+!}5i8esA!J>^8ZLDbNqRkM^E!qOn9uVyz(Vi6T8PQ%5?KRQf5^bAk zpNRIEXeFW@7HyFWXCiY?vfEIQ+GEI4U2num$6TX&8p5+X&=%HiF@*6N=nd9}8M0I| z=uOtf8M0Ic=yld+8p5~^w28F^hAb6ylMYpo3NeKFjA$>3wnel&(LNAur)UR7D-o?I zTB(mY=B;nm6r|c2!a5gdD~IYnLs;hmy~Wx}Ls;hm<+JvpA*^$O-e&C$Ls;hm<+1jG zA*^$Oa#`DB2y1hF?XV;nLjQ4#t<^DvK3TMjMQb8j3(6nCu`Rl z!t+|tF4krnveet4Pgr}`5Mq8CQiHXN4Pmtcw3D^bhA>wH6|lC}5az3(k61ft2=R!; z+@7^)LwJS;`hc~ihVUE_w1c%GLwJ@Nhv&|$wKjw@4tkHZnT9Nt3woEed_$HB?vGQl zSqn8}sUe_ktR)!2Y95GkD@g4yWT}7wcD@A~vQ$5iHWzEiQnNw3V7IPX1Nt|+yw(tM z2J}5^Ul_8~B?FcEjcXSbN8irG5c@!`knLFw2j} zdG4%rHDswtpo6SUF=VNyL0_}>oFPkn4*H6nX8c+sYdcBg3findU+2Ss~Ww5LUTPPFx+Z4#|O zv|XY_-+?xVQ)8*2Ahpbpg#~?mH%J8-LQe3D3lkrG15?w zN-_i+q7{i2HX0>S+b{$hhEP95%NOl9XfNC7lcXs~MH{lz2GKT)b{O;@w$U?LQ;>=@ zgn5~0YeXvoea<#okI{tQ*$~=x(bkH#A5_FP+Ktr|q#_JiDqpniqJ^cPp0kaSh7fZ@ zmMRhLuxLHUp|xNe*@lqkhAh=+yuKTx!VRHLgT7=N8w>@h&4$qTOwf0ceugZy6hzPc z>#8C{L2ADt%-<&JyFqHQAxmY7mMz*2&;fSkBRS-aB^LZ7N_AoPaN zAAz*p1VgY3I->0wvQ!qRlr@hb!~^sbYs(B_<^cMUwPy@rwg~!xwe^PZlx(scmU)J- zb|~7@qP;BIdeL@>Rv_BMH1ryr8XF8D7Ytz+!xVitNR2RrUR<=9qOAda&93YL9pf+; z8M0L5RD9iwwLXR{RRAIzcuH#sdsEVFyY&nq2SM6gwjoRH0MV`w?4Sev%r2`8O;|4h zonS4|5azWYvJs?84B*x|Fvizp%?E4O!~8=}MhsZGa)f z4Ma8&H$#@XV1{k?LPO{!LE79zLs;(weZ#&LfqrF|_Zz~_pPBex6KmHSLOTQ^8$l}H zkcGzLXsDynx2&%y@ml(pz`)s9ZvUZ~(q&Fi^Me9e8*Kp}v902I`w3_?Bhcy~+?~6CiDFsUf5b=m+*K@LssUE(aSz+(5xPZiWy(5ZOR) zV8~LJFR<-4HiS_wNSj+^2z3?oBm1VZ@$D;iIlvHhfPpSx?RG;5ABb!q-wff2lgGB( z&=5)qNSn(vgi-=J!oD2`g|N#f4Owc`LdAQqg47s87;%Hh2A=dALVN19?e;N*=TV>w z*}YMQFmnLaV{M8d%zHqgtj#rqHV35rSZ4_Sf=W50trp>%OKhXHA=E9<#jNET!b*n^ zJCa!&W(d!i7i(9rzr+yw6p(grgdyxs6>~eqocfz>H^2~D70^!{s?CP5r`Hh13`_J~ zj2R3ezM!LQV-4sM4&PcsSgXGe`x@07z$E{4PlSw1K2Q9k6gahkfnx#E@kZwL+BSk4OyFL2zz=#h+Xby2qO>B<*Yqp2($Nxw2dIu+7OElFhq05F zT@Em0sRu!gS$o(J^6e3A1G7Lw*aZyIcAqkYR9kMFYh(y(P@rGfw|3d!Aa&djW}lB?r!o81*AVs! zfm*UQ)DU)|gIckcVhFp?L07Rh!w`0%gRW-nUPD;50$syejvTCK;mZ+KV1P>|{% z+HlcEiRKgSKGC*_mM2AxpgkYR}rMhOj#Gw6=j6pCLSL0cpGGhOnv&YR7i(GlW%L(6y|sG=x=M zP+QhsG=%;aM4>|eYX~jKGZ?9INQZzru#E&m*x3N;%-U;)u+Fer+XzxU4dMA4NZY;J z5NZ^t6Wd*G2+!I;5v)CL$WrS;9a-CC2s2j@g$k{*A*{JQi_t5GGzrv&ZKN2&`w*b6 ztbK0?>GGVm5u{cc!uSfL?H)9QQR(xxxtWI0bAs^Eddyu)K;78o!-lZaX${`0U~QTq zJp25Iwh^S78A1;M(sm~r!bnEU?GkehUcgwHeTxS5V3+$DveY(EPuAWygdX-qZ6io! z7{WXhr0uRZg!XE!Z7#_W+AC1a3n*^8LD#X%dkmp%dI@iMur}0?rA~s#Mi74nn+UUx zmu&UaVV&?5jLg}$NYD-Javwuj9|uLU_O2o1$2x5TD@BIzL;|GkzG28x z(XZO(`WeDV6%@d}<$`*#%lU?|6Kg%*L}KkGLs+!}k&Pf#Y6x$>yk^_&ZV2ruNSj+_ z2;*l^ZT79f2E6ygE;llS9vjq$wPy^WSKFvwIhZw%6LQD2vX||;r%U;wp;T}O)v){mtoEj#<8G4_N`Se_S>?{tqoxf8Pu1x ze;7gvkUmKOt z3vLfE-&pJ3d|G&`#`Kl4wv$H4sXAAY*D4twKbYD*d~{-J>SP3gKZF_1M=piaNBF{9 zHBVxL#$4)Tb8`$GYzi0tKp#DM+Qg*Pmg4g0lyMW22GF-L!tv>laQlQ*RyaJ@`3dv{Oh zGl;*is*74BUs!eFNae)zgaPu^O>MGFZr~`VGS_YK0T(Wb?WjQgH=XQKTlIAMOWKV| zBgTxInx1jv)a2yo#MGpT$-3Qel$SrZ-AZ9k!>l^$edh0v|Kd0ZO++^xyR0 zwEAn);}rdhvmG~Qb%&=<8zqgQ={IIfos5>#^o86djLPV(zYOQ>6HLEpj=HtYTdD@H zdeh1`{?!=Z-Qz9^bnidx&JT$9P6+T!Y!=`x8UK3<-A#I&eq#r?OJWE6=B(TphN}%b z@bAd;e5d2vu|8L6(vxJ01$R-6X?J?hr)&4SH9QR4Tqo)JNJwaH{kNWLv-4tu^J1MZ zesh1HYeTFrW?h^wCifs&i5;)TtGL4N3L7=U=oim*=!XNygpk9J-|^4s(pu-m8t27o zU;JA5u?Bvuh93pmkMizgJdSr6VoH;AEQXHo9=OB%d^J>KTm4n{+gP!=qUf1zhZ%kmE zH~w&cb2HfMI$XI{iIbAm8Rh@Hl9XC_g>i74Z%Z~3dgH&~fGGzu`PTIP*e=80MAjbFMgDuB|{>spHJIB48h z;*DA2iCN_Hr6Czj$de7LdTYc;8*B}OMZeju-xBDJ3-IJDJ4uC=e$NkC@I+k%C5tXX)@O5IoB8OEFNf^) z_hpgiaD~Dc=gY|@k;CfFM<}w^;@YnI$WupdG;rj`ZkY1==+_gozc>b7IwM^gSEwj) zr93r~WToRpIhg~i)LlKSomjn;V-*X zRIffoQPl;>AE|ngt&4p~87{r6ks(q}sDPlHEP-aX{K4KFGUAPj@MJCF+@fF3ErJ>u z{oPv#kXzJF7Gos`Nl7l~+F%NXLoy{rs(fpIAwx;I@2u^&bJ{;N(BTt`2bW5RRNnK5 zGL}zS*@vS~;^fMvw8)`!^5mouXEh_v${_Z&BKFN>Gp*UoY&OHTq9Z)MMVx~4%PB~} zDM(N@1d8vNrO(&Tj<6Yw`F!ncxnWCh^T=PUWuqz)|8Dw)r>)}LNJGK2orZzyXA%$xMeA$D)A z;bHLdtsd;`oM~Pk`Qx4yp)y)~`F`FP0p2VUYsE(N_xi}L(`7s5IDBrr`viOJVqQ^g z?O3f|U1POVNJa^fu~(dm`lUxw7+zs4HN>AzS=-^)HfPA$cg|@FhIX_^4n=lOlkqjQ zzsOecB-ZOAH#lz(<wvF52&nY9+Ble%T?@p>pR1BVGL>MnrUhq1k>KX2P<6 zm|5J!Zpc!wvTq`bDej_3>plyvFa%A@tVturG(A^e|Kxr-_o_`YuI{(+oa(**uLk zDRkbbP%*2`xM#JtL&+)ZjiNE!N(m)nT=`I@aVY7RLYc#t-6@n=gkFp^$v1?O$5_cNh3@u$Yqn7?U3DctxE;pLa@jiR*I)kdq%_TB(mg)dV(XU zBXMs-Ka`3IxhNQ9vR1EPPgVlJ=j(%CU6@=aQ3%zxte#K+)CJ@abCX7ZhM9hS#66-z zLwtBjhv^PoPWZT=zFR9c*pt&$j7@mAANnA=j0*Pl3yk#mBIqKAe)}VfO%ZH|OZOJ~ z#miS1&)a3e%Ym7Y+fN7E8yAdjrp$e^gVIAb;=DeJDLZ-Ui3trtyg6jh6Yp<`Boz)d z>6m+{F*25?y>Tg&5ak;qG#wRY?9O$D;og{%jvsJ1^pXQ+@Lt-`$^UW@0Gn4jm}Z@} z9_e5jP1(9~Fil=;eTjq99NZ5~OFs0E`cj*z-L-iw*mh^GgDFXDGnBlM>-k>B@W)T^ktyV|YNIGA5jZsie%$DB8N4{wXWXRZ)O37`C%vp84wvm|nG60j`K<_S;zZk_)U8`r z(f|0z0Ipl3X5G5A>edaYTeo%{dg<XMe^bk&VGCW>30ZIuPaM2ibm3f{Iq1GC zSY?cG-xaDdhT4l~zL>STyv84NZ|#bungV_4I_SVJ=WqcZ$$pX+dOUj%xaE1Tm; zt4Wy@+>p#iAyAM*GM9oJOB_DmVH9i=_)HGGV^PGFS(}yt(L(r5!O4wXk-RG7ymzvG zLF&{vR96FL%pvP@NW!WBS%5vNiU@Ehq8uDc;l+sKxOe_s*ms0G`%p5vFbN2}$m@!} z+polDx;KfZCu~m%*wZW`_(m4WCC_Z9H(m;SBnKX=37K()^P_P=eUA$lbNlEEjM-wc zb&`Gi=PV6A8w>7`QiYh`C^&2AT^t7V9+D&%Q7Y#b;wFw0LeH z7gJBxGDK=y)>8Z;(U6NMesj3^&G7kR?KH!3kBwd**>LAYAO+>VH;2Wo8EF6gCb3#a z7f3lWSV=xnLGmXc2jWm)=XlWJ7qx^s)nt%ZCeJe~x}}4Pl-iDalnoq8WJ|ue=Ex&w za?Le+2lLp1QN}!#QnGKGUuT=AWYdANt?sCJD~C)`ng`n}Ni@vambD7MFwJQmlDV3R z>JZf?pTD>C`9dY?X5>j}FTJTf5~j5Go76+j4W;A(Ri)#0=_24#?IXgH8reaOBKOd0 zgqAJf^Ql5RvWUWb%I@2}g`*UbS%@NsN^K7me7*ud%8U&w8@8$kRP*xo!!txpEb6Gu z+qw%nVkfTXfnsgSMiee_(RPNi2hND|`q_iSU0)7)fzca-CX29ksZ^%!RE@{bZBQ z5R^9>^F+UWIBN=aQ3i#l1QE{Q8%PFcGy ziHo)~rY?!|z8rE9m4Je0st&n@V&zwSlrn}MwGoAj}`ks1ze6-({xBjD`IAwuyX zJFrUbRnl=ShkZvWqA(wtf>n44lJ+Q%3XfmZ;oKy?AF+KW(1nKx-jbbig@+zXmh%!z zP4F1~mEAx2C?K3EI!(~kQU3Al*MEys#@XxnZ`lso9bkC}-J7<j(}-eXZOWe8Z&skqNH!3u()Soj*b@Y z2Rjf1G-jf|{cSgR7~U#QE(Zj<@5JNc39REWaLjS`%99m_4{iHqmQ80UyNwhyDEXrn9rMvuGi3{V-p;HP_LGY<4&JJ1BW=_0~#{cwL8 zct;1&z`cgIZ-6&8LI&;?Cbc6llRa5>CL2n}tnxqSv*-fHymYODmpGUP(vh}Z3|DNX zA+OCeh_ji-bvDz;%w`%z*h~Wpn-8P4u;;M_4qofvB@S)}w(U}bZu1fcr-5xZV;$Vi z!J!V$MfTY4Q1!N%Dx1wz2GFbVKRm-vrDyoqj(6kKa?ndFm_x^>r6o_DIBwFo427$H zlV>DP?Z;P%sbl$`TsiLjxlWqEVK?Ea!hM=sY2&6(&bT?XmogA#LoemuKxk5^@;}ZQ z^{M953HE$?6-xfbhtLF^$$WY<4106vm*>+ATj;lL$bz?n(2Qi!#o5iL(Q7#8(|uyA zJD-k#3uii?ZizrwGM}dIMUS2C2c2d|`UV;%u5aB9&og)6{WN z7r}GfTzye)HcdStM|Pv_F9G!o^cOvYb2hzOJAr9C`p{kGf@jkO=7N2)r*v#=yKSe; zYeME7lH1=iT*pA)=j|w$=UR4cAgW^fS3Ma zz z>SbRrHy?Rc?~RfJqI=OddiN{Tk>Uo3DPchBU-0$SnF ziv??8i~~)e>l6_d3JxRa$FZT7mJBYWMT02+hQKphEWoqU%PBYT@4xE>Ivvh-y?~Z{ z>@^6g95z!XmtRMqcPnpBjZ*q=um7$q*eeZZxUN7sbgK1)9rk)c1QLGZE9YQ6;p<>D zvsGA6h%URHkW%gSgy^$aPq-O@u4FyojGxaV@MYE$YSVNV&0N_P1$wIeC$A_(S6ERH zPpi42K+nciMo&DS-#dRKxNyZf6q&*-`i;}83w!7CqxBWk&=zLVFWo4&(m;>ZIT2pO zeQu!%Xr+PvqGgwrhP`vM*`L+W3$y5#{fWukJ8v%Epf#|G7Q5t2C<(cy<+cRHTyV}KybI_6nC!AccQJ=S!iV2F2-|#tm^iST=0<-q+EFb;vou`v)DW?kka;k8k_s-WTwuJA|FW=*| z**jO4j75Bpe)%4!z+S!YVnsIJqhF_+yz^p3Cf}o9r<+uQ3s=nLd-SW_EVqSV?>wFL zv)LH^mNzEb2@(QLc2>5Xp#0-k*)HJRBw)4^P#Vj9`WEEY)34(+~0+; zak(epk%^D!&shWc6~3Yw!pxWha%RqHVz53a}dX5IeDG$1WQ>3T%Ox=h)Rw zfsE#Et;n20^YWs#GvfT8zoQ@+KAy>rg8j%1=SG3OneR2g6tHkb2J)gXi+*((q-6?B zC}cN7IZFrOU*U>0wnV>wYzaFJ3Sf!L!erRsvOqvXYx)b{PPaC)H?ts`Lz)7!g<15g zi+XuW#R@Cj{#^&jr&}j^0Rhr0=c_=c-*rI6zMbSWKiQX-tir~F?RHehBAgsm0$uEh zsA2vw< zlI#Ew=n_PPyf~XBlfCnFuQw7_3$y4~*JJ-q08XU6dN<^X1U5#$<&E*i1iSAY!p7*g zyfKcQ-3fZ8bfi#Ez1Oh#;2D6R=Rr(9xLA;p5KuVV?t zxo~2ZSTJ_4xWtlzs!;^LO`g!Y%ij6faI0`dKgfky^h&zQ zt+?Q|tN$@8F?#tZ$__MvuB}ApWF=^&Z*T8}A#89vY=3}d&AJ#ba&{th%OcsX`%F4~xo zw*12TV@LD*+;urx68}rH!{^a`ye!Y}D<2B=-_Z)L`3_9D@CHK>x2yJFv^w6X05ro9 z_BIKPalA@<*xsk*aqV``*^OoMSE;#+-|g-Weim%+<=8-_XhLqSG9jzir$!_-YgWnX5Y4W*>V&e*3rL+P8+x6%ts*$Xw zSFjSiEh`)`LI~9%OEXX{N_c=;Vz&`RaN2G= zXn$NJB`W?=cx{~mYcn=^O`DiF^~S`}8Iz~d2C!tgNY6-|n&E#Hi(h)WITfesjZ2j3 zbISLP&bd^=>N65H(5K}fT^bu9Pde|#=4d6;)7X9iGjw!eU z0{6~e0zV5^P_tKwFF`|8q1vQD{2yIyywbP+RrLnvL6to`D-N&R zQD^ixWv}zVER5svjBFdp3PVY6e4vM(l^xy|Nkx<-ynN1WhdH!?m2g(*&<4JYurKi% z9n44Dm$mpZ!M+UO%QXA4HZJGoWx^L*sly6AbheectgLY;fvn^@l=E1jjcK+mixs-E zl^|A5I+S2mLQxEDGv~8HEwim$z{*;O62gkI`$MEaC@Zq*845Zj#7iDmLb;F?=|!Pj z#EP`b<}d-IyW<^PcYbJ@1GMbH1pZbnf8onTNP)6mR~o#EQK%Trib+v1xhf`U#bmFT zH5Ie3Vis2{1{I4+#o|=4$dxOT)H{{rNz!ce|r+r`Qf;>ZLZ@G)S>h6(3;+k!lP@P;g+YXSvS}5Irq@@EIb2mi#_ldAjnOO zXH+b%`GNOI^T4~Sj9xIJ!HB?bIu!4Z<4tg!8RwpJP-QgomeS)Jb5d7LvF33tJyds_ zYbgb)I0db>!wr8}`8YYe-OD$1svxW(J`Zep<4^Ji|1O9Th0mR*4R{0XQ-}iSSgQDw z7=_|C-m1MBPwM>#en`NLH3WQ**R{ukW7y^tDcUtb0WYEfVG*2ggnS8wdqIE z%j{Gx6LQ_!Q7XG6akb`E9@j2!%q~w1kAh8d#qXxKhj)8J(yL--d+sF9r6vypl;+RQ3QtNHUQ9I!Gu}mCwt6w&bTBA5__PREET)FN! zxwelnxfI9TGI5+sKF)Rcs2%Y8=*UOM0fppgbCZ=0nPR%Z8?!+Q;Gs8>RSpAwcjJ%K z`4M>Agzig+1$RSytXJQjheK>(l zIG*@5UYsi_cj4|VysliI9F7Y1xK?{{;-uUqm&52Txg6$+S>=siRo3ND+hv4urPsAm zTrO_P6{^%*&lA7g>sl^1(DZp?mU-isi9^L3@GP`!^7)h3QBdaPNncOdcBQHJ4%r(j zjvjiOT@)Lqa4{E2&CxCEqR16plv}58QN|i&T@<;Zi*oA}E>id^38TmrU6fm=a8brO zWy2_PMHl7Ph~e|{=ORG<(MKicjbcQ3l13!xu8<4%AdyZ_Ea8aY)DXWd^mk74IEU0> z$E(WN!a*a{KRV6(`-?Ir|ImHYS)7skx^q1{_qClf3%_oU&(3|*37k>*b?bX}?%Pd% z8Cxd(-6f$sA}M#0ES({XO?;fiau%$NkTFtm&pEC#LeSh|Z78EI?YdKRJnU%(vwA#q zHvY-@`!DiOM)!Y_e=>KdhJSH`20Ln~>m+ZP?1J$jpX^(9oYhChOWtW1pr6Fxi!*p5 zpFey2$WtSRmn|ZJ{-qge15U9%Q+5i9^P3ZRxVv=YC1_mi;qK$$ax>Br`&BdhFP8Os z2Ul1LEWk=&?_gSPyCn>R1^hTx0#hUn5ps`f4bp-0$&PPDz>{$DJ#Nt|eyZI#80-eOCjOF~ECE z1B|?N(@5iv_vZ{GdyQ{{gY9=bM@>$erB5s>yF^Fr^&m%a zEA_f?woVM4trLhPRXQ_!Jcda$u1D!|ET@($SHY%S!M(DD$A7vtjrno>o*Z*sN%=WE zek3Ow=RBQ{Me*d*_Znb%mrD%yK>OL0$F+yXm3zpLH)ao?8jbA^7_QK1*d-Vj!AGo< zBlTr1ga%9gL%H4g&HSC-R;nA-4Zn<}^g)9X{(98>;=sQ@CE)0H?SIt`f8;6BKMd&~ z$P46^M1iJrII&x&eat}*>Qa1(C%%Z*{Le7$?I=_?{HIF)%S`$ClcQ0-dHvJM(|_Yr zrD9ege=2{zSGEa5|JROIdvZ4hqduRm`y1~le%qz_!eqROuQx_tc>LtU;bV5^h`O=e zvDz<>YR_~Ecq zdZcB46XE|<{BRmO=igr&zv{M!r|M7tx3(YujgNoGa}K)Q3hiMf<*kvKP432c>nw+G zd!!BAqcZSFVUKC*fy57D;nggyzl{e-I1f7_p_XX*6`F8yCCtTlt4@Z_&d^ z{&&zZ1|FB{A0M4zdzhwI_Zz{j)3o<{^hsc^!jyC1O072q!aZk)%D584=Ua4>9kM1M1$H{P3b0?pxuv4)2WXskR{3JqVE@DF{yx_#Of}ZB%kTyx z_?X=~0poXL`Ok;tKV*Qv``CRb(HZDv@S76PJ!ctK4ae8OsyqjEnF*?YVcZ+P2&;w? z)aCZl`chx~Qe>RNi(P-*L!rDm){8pkVv8{fzuu-#r4>H$sh-Fa9uE_H7W@Ye9u^!5ty;IT@tKu=Vl z_vT;pZ44|*^7hq+ zoDAQWf`Nm~8*QSwXl21DU|R*AKy5CsC;%l9kE*bX3E`VK+4zQCW_>e`;NAV-yf13Pn}gnH`sNb6546XB7xe)SYvnM*#jzvu!3mj!ju?Q_6 z3tq@5PQcqZ_#_yNI-l2|uvX{-M!56)_#1w-8D8EDL!m8owEbBB=#!Y?-;h+@_GBg8 z_gC98OB5H452X){RXWM9ephXl%&QrGXNzAZ@FDaR_D`AG``7xZQLk?J+nplu@f3`< z0#fH%Ni5>`pjDF|i$1f4CXT)p7GI=?8upy(^ov8)4}Z#O%1=Y*(p#m`sD3HhYOmAT z9c<;}p?M|CQO)aH#3^|}fs;9Fg$NZ=D}`950ErM6=Y46we=4y) zglHXoh>$~+3j-!Z6gUpi8V(UX^zGp)2=Og}TsBDP1J?Kgc5b9-Pk0wS$(jit*YZwV zH^v(fIK~q&=+vh3_LVo?XApJ*IFsG!_|ARh-0m|dp!jxLOO09QiP`1I9rx^d=x1hC zhf^8Rp=das=q`d;4$dMD&LRwL zd&DCn7D6r?o=|*|&li@xfriNRA&Zzr7(IBWEnOH^Gdt{pQ=82zDrcxO== zcL!cjvpA8mfSzaUa^#)6XCR^-i?Eo19ln-G{U@RwvnOw#jCqg?nZEc;+GaE_kIJ4d ze_6BPD6aS%XJS6bnZWC#-ySi0LVRE2z9ZMYYzafRS^@Po(%6VfV-A_dr-W+7XTHJO zQB@d#RpJiLD6*3XRIT8eJX*;60>=)pML6ct7W2M>#d?K}+BqWWcRehSH>V?Y#H|=@ zZ|7Hq0W}L7wLg78Yx$j$fY#ChE&hdeH@Gq}2Q5z0=}9?^^bE%zlb*Hhu?pTS&p?cQ zIrOVjl_q*7RVPBk6{jjOrz!zHnSx(V)nm9{Ca`n|tz4}>^#V2q;wC36i(k~P#s0j( z@=>)nAaHNFlx1`KYS-#lGk}MaoV2!!98|W9)ZH6UZ*RHOwLKXa7{HsFDS2%NeH1~q zyYs8P0X6rQOJUm!f1r`XwtLP%*V2J5K18X^0YXB%=j>7$7xV5fl-Gm$iw@@Wnc}zb zJ_{Z_R~+uykH4^&y)LCP{?YTVa3-ak&%f3|=V3nXt#a^E2WL8%B5RwUPW#tKC#Nfc zaj8kkGkZ;)nm9}SAx=t8Pl?5@c>e^plJU-2uBW8rA{t!8cnVv+B^9$T;cS*v{Nrlp zn#!o@DICe_$8Y?^a}_zWDdKD*SLu3D#<)q6ftAGXtkxgM1AqL=47o4&y24_;G58=s zJWcHa!IcbM|M0n{*~)U7=bE7sn`)20Q%)0~Y7W8wI3BcES>61gmqt#JA5HM;Py=KF z&4g)|TAlgCA4eukXUd-#pGy%R|Fir`3)de`DE>GejZfLlAOHL7%W2~CzoNb@ z!KnKGQhhm1eEwI~m!kh;`BQ*_*#D*ScAEJ7Z!B-8Tt94vjWrEuf6!kvrU_FGF)Xf+ zS#KTH4YU&PN7Ye%L62QX6fZPfXcA}@o4ZqJfzV1&cdRRgskNZx>Yh&_ zco%dD$M-|f2M9};`WNUUrh}jce76+Tkf|Y7jV@)10_hZ@rL4g>@9Hecu23^Z()d8f_s;AuT3(}={21v(p14z5~ zK1hfD07$!cT(qD-+gx*yzS{|;!xt@gN6Fn(P&*Dw21tkHZn=8`r2Rb~9~{vBwghRH zyNebB(&om>-5DV5??Sn|O75-&;dDThlJy|%Z?4=u1PbSR`75X$(|Iti)8%SVC)PTF zbh(NKHD_%Zs43H9AYInp0(E3G<9xcc%$06WSzH0Md33fVACXARmXS1%AiD$1v3cGzEH?x(lTJeMV@9 znA<1j8lzRv=3<1V2(1))U+62)0oV^y$3fpRQG2Le=>uB8VR-|jTe#hz!K@tzB{0>) zL;X^=dnpJGA^pNZI{mH&Y4`eqvf0LP5Uj&ol9)>sb9aH-;C3A~7o=PHzk@!6(_v~2 zs4d^!0J@ebAJmSi0Mwpo52ypvK~P7gQcwhwLf_VjDHzn5sR5`9Q!`LkrgoriOg%x} znW8~Gmg05id3A&Og5_CCJAJ8>S(V*5${XjP` zWq_J8%>-S=G#k{6X)dT0Qzoc6Q#Pn2(;`p{rX`?ArY}LdM{J2F+%DF7fpqD-S!f7I z*Ql{VK9J7UhsE5pa(A2D{RO1UOC7w9p{W7rb}k34h3)}q_x>j49+$gc$=!w*D|IoK z0~e@1(_+viOmBg-A0G;R3DV{CxKK;H!=Zia4$?Mm18H;Va(6$d5xe|5=yIkT8rU}a z3XK41yBR|7fwUimAQU{5=g&d9Rus$K8W_as6b}}>KoLwK`0$uct4oEh1?iag5qcP; zW4>O@y)Sn!Ze-tW4nk!?x?BU&>C#E=#(;FX3=tYFlqz&DNTjVm7bFrZFm}Y@2rfg6k(@M||?msqwMstbS z33`gPB9QK9PJ*_uc4N5hM=Yoxw+Hbc-2#sW=@vKx6vKDtf^KD61iFoB87P)%6)28r zEvP@!X3zkp?Vy27yFl?wMW8`UC7{7f$3a7w0vandlqnQ6jHwamcBWRK1f~ek9ZZp+ z;Y|HNBbbJOMlvOV5}DFKqnKucMl)rDl9-l)l9^V5#xSh`jb+*ZN@3dFM5!B@_JD3; zDgs3_?FaQ`ItaRjsRT5R=`iSKrjAYRR(S?!JZtxXbY1wn&}xt__pb@<1?f`qjhOpc z?q1T&zIzKum+?VDDIi_O?-cp~q}|&q=DwG^5zXzpV?nxAegLFf=~meX(lJ^l^be5sW2;buR<<84LFk-N%i4f+ zE$bq8Zv*KRA10J6lqQr7(z&ow=ry5_go;4ARsIpA+o6D~>~`p4kZy-sfpj}`FG#n_ zFM@Qd{5?pw$_=izTje`II_4=tb3i)g_X`~a>C_Fl#XMq|@bTp_ha<3+)2wbSV+4)!NoB6KVs}sc{2Hx5{xKof@M-IyIgI=~%uX^cF~m zez#EDHg-IEflL_(X>*Uu-K`+qD(?m9R{1zcx5^i_wOeHuNVm#aARY51LQjEoEH?=q z1?iN$=vveYPRWKKosvyK`fg_s1{Fx>o^tm_xjPD^TlqO4-O4`=(yjcfAl=G;0Mf1e z0g!Ixe*@`O{`_`!D}NP8xAN&A9fCQasi72t`5@iOF9GRReibO4@2&-9Fl`1+W7-ay z&a?|OgQ*BKlc@wWi|IJ%PNsnNO5Md23YyK-2sDSO73glJ2+%!Dk)XLu{Xp}WhJfZX zC4t;bX`oD|*`O?@Y|y<-OF;{mR)Vsb)_^=r8$b)0@HO^u(l&0EyJO|2!2Hg3AMiRz+kHpq-yrSE5uqksY~MP8w2i(XZ7x;rw(M&60k?v5AFvpt zZTwy61(3G;j!>g+wjbAk8gLzK57ITXhuj?i(&;x`Xq-@n&?1n|g;heY3wS<2I*GsL6GhP-UsPEAgG7k2SkGO$UF;(&p}$yN`n!a=JVN(&_S&+?=R)5I)x6G5mrI4(3*9VqJ4mO- zB#`a{?g8o4xDTXLV<$+5d5_Q!ARYR^>unki(luZTNZatp-Cc6G#tn8K&6jl83XHU4dAU#uNQWQ`bg7~?)(g@pnIm^sgD&H{FUZ{ua<>Si z`+&N=>^`6!NcRCZfOH=)7^M4v$spYaWP@}c@DOMmm%3L#x)1mjq{CM?N~wpreF+BX zKHyT2?gLtb9^t!PLCcx?fL1WYf*xf`06oT(0$RzG0eYNiF6arSMW82{mVs6=tpYv8 zv=;O<(`L{!Oxr=LnRbDmWhw$a$5aA(p6NJf4O2jGrT)Pb3VMO55$HvxR-m;^5ulft zB0(=R^#i@aGz9ej*n1Z^tE#$vd?O=H2NclpmS$6-VxruAR8X=a9H28y9Y31y|lYp7_byoQRtRP_3Pp6|2wI{WN7XP-Ui zg1rCFZ+|%KXTE!_wfBC$-}PPBz1Aa!>VSS?Xb#Y$hAsp8siA9umKs_*+VgHU^f=Hh zhL!<+)zAu{uN!&>=vG6kfF3in8t7|=o(HB$`JF&d?o6NaG?4Pb3qVTmzkyUU`VSC$9IL!uCj?hN;m~Lx*~>U5yW7d0 z0NTys{sCxLLoWg8sorqtKR~K2?RsK>J_Yn2i!li3e+`WR($m)gt+c0~4FrHUp9`dX zbUBco>PtXBGuEyLk`;dgNLGA5(9iAaQlQ5TtpNIkq18Z77+MSTOG6XJ1l->ar1!WJ zNbEier04q$kl5V_BzAk96!@WifyC*-Kw^BjL(_ru^vzE8w3EF7Bu-N&2b}H>q-Uvi z=rACaJtsLd1xTFE1QMrT0Mavm6G)ui2?WBy>Gy%e=_5dTswaS!85>UliPJSe;&eUG za=W?-=t)Ccfu1r{c?xDD8ma<%+R$X6Um3a(NVS`*fX+r2P!DejkouY*2D;U(csbDb z4Xp-x+|b{EerM=ypmm14Q$6n;L%Ra)VD{1vXg5Pg0QEC82Iz1@X9JyJs1fK)LstOJ zHFOgY`|zv0JAgV2Jpy!xpn@z#SGcA%#XeG_Q8p$CBOGxSTK?-^PHbiJWhf#w@}AE?#PPN$*2#L(VA9F?f@ z4hA~H(6K=K8#*1R%1|v(cSCc5-tEO0R{?S4qssd-&~t{C0R6(ygFrtp^aRjthE@Zq zcmFjY*--z};g#)b4bTq_)dA`1Tqpacll>IvK@0ah&^HXd4|Kbs{{a1a7e3V|#s#Si z0MgY-PIfWSw=BjDK<$R^0J_f5uU)uTfjUg)jfWR7R0Xum&~P9<=_DYI5>70PSe#3ZM(@>X(6fnCwSD z@0n~B&}Kt>PYA*t>ChyH<~sCchaPn38HfG?#F4TpZxhh_hWboI4c_j1AkZF$1_B*v zS4RQuX|icR2N+ribfBRtUAS9-`kU+#$_)Jm=qN*faN%ADI@)ACCZV^?&?kUSGPFOC z?t2u_$tIfube5rJptB8K;=)}AbdJex1Cj=x29g~-=Vbo`l11z|IS98ukgRT?lbr?h zO?&ftC%XnnmVKj>JqGlEg?rk`UIUU{{lm%jJ`?4Ph1(xU&sPH^yE@&;76NfZvdX*0 z$sPt$4Q~ZdyS?QGclFa#f~$uCEwQUpfOLG{R+@bi}7=y3l04PNcY`oY7qATpbstXsX&T54M=f2fEq0BFM$;I&p^8G2SDBW z(l++JAc#8zNO8{ry2#?*2&B0804eT^K;13wzkzh$zP0F0u^2}I4KsE}0$psfc|c0# zF`ykS?q7iv_Z^@{3%A#_AnvDtnoKqcNO5li+R5Vn97u830JT`SEkL?&x9KQ#O?Eht z;?4m2n8m#wNOA7~nrGpD1GK=^RsiaCK)V`x7O2Y5TR^%;&zV?~*;4KgwA9d1KyMkE3Z&Lf zqeBZF`U;S=@ExFy7UK~hz1uP%rTi+8(%W-ZaCHXIp7t!)1L;}r0=m>vSpoFJ-t@a$ zfRtXJhTz?f13K6^xCN-z&^{LiXf%*!tzF_|-*d7JPS*FLAlyknN@bptec#Fc;AFiU zgK)HYa6lh;VYk|bU`#@J22Ybv$ zpQ@pgfyBWyAf-1SXg{R~q___Qy<;(+1A5O;_og83K0u0l1Q2J3^zhCFQrs4xw|61q zUj^D^=vg4$_hlf({Q&6G7I)v~AnxHn?^}#>f&RzPO+bo!FOcHyG$%kqfo`#I*8m;S zi}(E&&|W(e?Rjw^8whle$@;bgvV(vmTjFF(freSQug?v_JqUD)$^PCN$ab8E*0#w` znU9u@J;8ZE{p^jV0r@2p(EcX78t4E+Hvt`J=yss~hVBJA$j~D|oM+R+TLyHnp;bTw z3>|O@da?|i4kX5B0X=3It z1!-s?knT|fq?~dA5a%gXc{cz(Z}<2n&`^u91W5PzDUj~50_ZTix*F(kL$3oJX{gu2 z;2!$}?cAFwj|1v$=xU&c>>jrRDZNL5j<&dKf%JUu11auam%^J_+*5%Rw+={g=K~#M zac>7w+@ApTwHU7f?Ph52&j)b_11ataK*w6#Mj*w#21s!q0IIUMF9Yem{{&LpJubt{ zAB#I2NO30t?PW3AfIe>M5g^4~1*EvI1C6w}y)F;p?hmB6V}SOtxR(Jb?kzxydpFSW z7Izhp?)w_heimc*E0BK;odl$~wLpqHAE?IS-VWq*1*EwD1;kluRbJmO1aS`nQrr`O zPPDjU83g`ffaSc#^LyrL|?iwK7_jRCC zEN-tWgSh(xDehRHgDmcqK#F@Ckm5cHG}hv-1=4-r1?pij`dx**Z)ggT;?4n5-0ylg z7Onf=@A3Rp$Hab>i%0e9IQh<@S`lw4#c%Mx#fwkH$D=+Rl!hCzQiv}d9l#)&>$tGgR7@)ycPd>rP z#sjHe9ZhpTm1c*~xbXgD>7g>~r*}1wV%!L%-uZ6;smJ~ zq_^Axq_^yW0#I*R1*Et9G?3nM5Rl&TI3T^{sX%(mvw`%Mvw-xL^MUl1R|DxSzXGJU zWPL<$`6D2`<)c7if%tVp5AS6c?oFUJ3&-!$l->^AJ?|w8 zw-b=k>jN~&!hHrv;rauuvv7yFa7O@5v2Z83aHj#iV&NvZaOVQevT)5VTr1Fe3%AgP zyUK<8stflGpw}(jcU-u8UAUjSaLa)B4Mz{}X&3HyKy&QAFS~HB1HEbC-g4nK1I@N@ zJ5>bl+Y4x;h3g9>UOo;q*TNm*!VLj>+rk~`!i@l$Z{a4ma8rObS-A6DxEU@SHahcp zz5?i73%AIHyWWNSjth4u&}IvFp9}Xe&^>nFr(HOH&G&(Yd(MS>0q9K&_o_o507=vT z2HIjVyd8r#{}|BcEylh;3im0Xe_6N#T)2Tii!9tI7w$x$trqT77j6>JyB2Pi3pX3+ ze=S^#3-@`Te^|I1T)3No_(?zy?^YM?yFedUxJO*L$AEUQa8I~!D}jDy;r`;n{SBzX z!mW4V{u^k3^$y@R{`>9-)WgE@>qS|_Za}-3e?Gv4I~b_a!VPlaj&|Wrb>YSXr7YZJ z7j7!hu9jYl3wH?+zd!2XUFO1FQFq@Q zb9e1d&F9#}P+6YDu3^oz=+oD1!j%f_UztJB^1nNR?0v8ZS3ppoG(pB4*5ug$I6HWf;M&{sKC2#h`IX)JYx<1>szxvO;E;@*tLM5(9_qfCqY=$D}$gl ze-Et05?S+dKu_iTeS#~N$eLGp#TZ!k*4{xXp-4vDx`3Q;9B{L4{zX9)-*^hS@!H%s zUQ1r^U*DP+7${^op$C5nPids&{xHIf8 zlOs#U&vj-z&!nF+BO0IWnSi5EteR(#V4t|Gm61%IyRV43`wDV||N7P}OLG)@5*h!p z5J#aq*DNDPQTLNJa!bcIMSDh^@B{lf3Z_Oj=+?9R^S^py;X3}@9d4$Bkcrrb9_vP3H47+V2;T_)VeQr%vM-6aa zcOw1F_wlMxY>&2D-VlezI@I9MB8R^15ZlFy`x}S; z?$FL?G3x4pK*!rXMmpI9hngI^&Y?RU`lUl`pDMkL4ppKJC)uG6jRDf#ra9SMhZZ|@ zuS3fn`l~}59qNIWk?!#+hfZ*4Dv<8Bz{#$2=q`trJM>qFK5(cKwI|)3Bff}(=`J_Xv z?MrsDLv;>)!J#`HS_Y)Mz35Ok)IudY$e{@iUE$Du4m}T~Q6s##_db68@C%NYaJ3G9 z^zj9MKMM6?uhL`Kcko+@-x)Tx<_ExuarVV|70%uF4CLLWwT>J)YSge{(`y^2Po2@y zJbP+uOG9nb%*Ohuvuj&sHZ%>N);hUVF9wNT&ihNjj5gO50F*s$E!Ou^wN2-3q4a7e+E4)qmm3PSTA z!K%|i?Q_zlpcxEc=vT*R^jDF(+4xV?5s5mYl*b`L$zJeL390)klDr^>I{R=FVersd z=$X;jT$`IbcQqk>cMU9@zW&g)=pzz+L@AG?Nw(HUC8Y1`NOD>Xecz6?yy>%QTdF^s z)A-Vt6B4*6!~VKregAaUM&nLbXYn3QYVhD6s6VkWyk%e0z*Xfc4 z5{W({WopStq+}(_)K4SHn_?{RrC9o=wN5}qtFEDG=2$GCeo|9weanp6>Gj;WCx+I% zu@cfftq8g|I3G$Rx`|Zzk&Kle$x24|k3jcjF?6raL-$0#T6sT@R(nHi1#4QXqie#f+Bx;fm<=lkyBGF2e@>pAy zj9yo=lF`bkH(!jQ_2@kiz>aK9foZKLo-}(-?etbw8jLM&y%I}q?g$Af=8`_?#z9vo z{-*0DAri$zDUV)OGIkP3Rx*lzfW+s=Q2cBjr*Qfl?1s{CX?@+O`LklF?Hn*6rB`RT zgRW5eV`sHQqLfIjEy-xVl9i0oyO89Z7)rZ;90BaeZnbAL%xtI|)m*nQmd{A2gk+wU zQD}9o<+a!qTSTIhC}j)sOSTd3C0WVndSd}>Q`4R_s`C9i9|I~%Hyi>lCk$xvXW7qui3CNAJq%z)Yl!~+%&hfrPeiSvv$8s zYn_-aY(ip>$#4l>v*PbMYKcTGk!lE%v4$X7$*BDvl5C2x;-AOX5Uew6I*E<3+GwDJ zWd5h%TEX|7Lm(2BL@94Q-c~Zsk&&!qROV}e4T!B3jG8!g{G^emO+4xBn$c57O&&A# zw9`k|(x|^VI};#9HdK)|0rkV0|6yuQ6OkLM0?~ z>A-MJwQH97)m?&4L?Y2iq?&+a8$qXJC8P5mB-s+lSp(*Mmi-c8J*uklCxsy{9S^Kj=tC!Cg}?N5D7^@x7Mk3Kj zl=9Z$O(kQ&B-u8j@dpWL9M{^Chekg{LK^>YXyKWAs`HgZqLD~6N=6zb+h#QWGY^e^ zUtSE2p%4ja{7MnlxRtDH;J7taU-su9dQPXgD3Vrh2P6n_|J}XqgDNYw)HJ1OoV4kL@y;I{7xu2 zv-IU`-fI79Pn$#`SpoEO z`he&kV5m6yZ^lENA4C6$EY=_9*rrwFQh+WdRKZK=ohXe8xJ{B&KqM6qY4(a_FW|i; zD?kODcpw%0uc6{p@KroYbk<8a2fUjn2WY}UE*lpxj3d616`%%ATaX$C8!Ao>_ux^YmAtST?#|K&5zYybi5lSSY9LbXkc_!QvI5kQGVyh*VBU#&SZk0#v}s70L$*ri) zK@+NH#*k9wC@umm^$jJ@Y%@5KtN`_J`iImr!BBDP$u{RBte%JSswc}dncND> z7C51bCYP-EKNGx3MMP2&k%l28<1mC|1*nLVN2H=rhKf^BwvnN*itbOUqR?EMyc!CJ zO{k!~jtJ+W;wsKu1YIg3l8T6=BFU&C$qG;rC!t71w-_o;MfsfERe4q9W}&D)UH#eI z8tNQ0p@NRVaxdwYO)=F5u7fZ25J^2ma&nT<$w^j#dN`Ry>RDu{IQ2Y$M_CZl!rzdm z0^NC%Py+4vbAb$t9iyJh@^rxDnrxI?N!jNbB~{hXLrSNrJHek+MI==bY3h+=oO&c#0jlBz z8>wokq2g4P?E{g4P#?OMtgG_cypAq&E>dn4MZzU?aStC_I@NGv52=Posv*)8CdoG8 zy(KF^HJq#?)qKTJajMBSb{tmC<9SsRn%0zCFX2E5mGWW9YHnWxPf`hyR6?Y&WXU*| zELj06;iMj^WUZm%RI(h8a(#?ryE(5)(hZvE1ghK`iiwj@VXtMhhKehT)`3T zBB_T+RRzgdRgkOz^>6}`)bpUB;?(n9JW69sj@l_tRUtf2E0Zk>b!B~;2#4CSYlQcN!S zHh7Xsh@=uCsYEiWM6v=@!bw?D$?pvnr;=bIk!$SLM2qn zC#%CsDXx6^6JAJaA(C2%H2NvoM!d6R1*nCSyrh<8hKf_mH}NPlVv77d^Qy(43YS|W zL4btH_)Uh}Dkg`l06$U%kyJsX59%dbhxeDP09A0Jm{d_`sJyE9FmFE^nZ|UwcvUb! zLRAdUsCN~kido=Csvwdoh@=Y1s0zsnPz5KONfrAVDz7Sr<;@lTP)u%B1OXDN;%6nB zyi^T-qzWRbf=H^6jH-|fs<`mOS@_edV?D_ON+@+HnQn%GhkUD(`rQ&H!S^Yn4|E#Og>DXVAsWAG{V<``{NGTyE(Q zuL5_{a!Xhh3fqKoPdPiLPOYCctG21GvA(6>=RP;+bNy5`!_eu7N#R=Bh!NvPPL6hM zkH9g0WX%Zdet2d$$$3qeG&I%CnAbGDvA(sKWcv*%SHgqKl`y9ny@TH`@QbeOK;0aI zUo(CU;l2TSI#7;P$%y=qGNNqz!#qjDT22gGLV8$X5SG14dBgf{gq3nmCf7LI1l;$~ z%!&gH&vp*p$r}ztd+li}nGvPD8zI|ZvYUORO2OYv#!3NE${Pubd);I;K1zAZfVd}d zPj7{fQr-}(ZKiu1;iDAu+#5*9&wFXuUoiK^H+q{X4PCnxdWc>E+zf}NP9a}p;*DW`^WbeEij>-7!!hcm*db=f~;NfEB0^l1(* zLz;m@VAn@re^|r~5@KMUUABZXU^tky2QOe`C6}rb>J}QF~__}45Oeb*vcI*V+ z2XRT90Q+4_=LE1mWM+2gk`su0HXL#VQ;Kp0In#whC|AmZ%a(HB9Da$65?xIv>>Oq% za1Ie>;$1}Nzy&ypWhgV#y+3pm_c}*Go0X#=N?}nkd=p}_TYQxA-URv|lfCVuls6hy z_kqdA_$Xy{1g6~6dj>M1ly?-|gYGfhM`dsn+J-07Q9QC8JBo?+Y^>+RH!0X#BS*o` zf?}H#qo9WnkqKqV?}E3^l)a)m+{eA$Bu+Z)@Nq}4!N=Bs*+&}d`J2f$Kt`1Ej)9fEWU|lsDCI2$V#+1|m6zJ|?4MAd+L~Z8ACrA~}X#Oh(5* zB*(y%dbxwfxC?`Oqk%kvc zb_3p#NFxn@HW}RkkwzN+WHOF45NV`=DQl#GNFxop2S*xokCN94w0n1EbK#cl*a`dx zbR}^DoK9RiCy;`ohKEb>WVM1(qg|)LsBrA$b%1mV$mGSRF}MV21ey2;Fz5>-GugtW z`DXM+>FCrE$lRGRFFkuXo)M&g%sVh+W*bZJWiIp5j+A+cQus;&hn37%_$cK)0ra7T zd(uZKZwFYy|C+3ak5XPE5L52y&GAvnTLq+htoBhEO7KU_$TKtVFl3+_=_Vsd*;+$BM;cSB+mh>6tSY*Q^+~cR$+s9XSjOf)qvX|YupWTqR?(g4v<%j`>_+aQM!_)HWQSK@y z+3*ckjvPURX=j>7hPQRo$fjbOy^dGUu`M7jF2O`@3yc+`wgBG$)DuK0nt&G z9q4`CB(JdJuEBQ9TXW^+O8AtHNm~~^*{7ph`wkr=E80g@bd0QQA640LQm^)tdujK} zCo9Z#M{~?1+>#H)ACIU@r)Ca|6!eTkmwq~a2Zk+B+nQ>7(}Zr?ZCu*N-?(($L70Kq zI;+0Lb6b&`hr+#h@ZQ{t6qRD!LC0>`BJ@;1Sc7T&C=e_+Pb4=_l=2=&D9M)jsMDT9 zK^d9eKRoNQnetknKq^9?1DBot<=p|K^zQZ%K5cg4HoI`4egb8q%u;Df)>3JvI<}5Jn1BG7g*RCd>wCTzx8S)Ig+oI*;lIDHY{H_9{x%2)_ zF7LAx*QA5VhQ5Ov=Fa=~;VLb#5)-_+zf}2%&nZDu#%TO7eoI%VKHc=hZf~`Wumj3@t29ShHQ4(E&kiF$V+(pJM?kCf#xF z=L?}*TZDWQ&ef2;gEK8;BDhd}mPj=)qLlZHf3>H#%12phV2d{PvCfM2n)U598`^6& zw%2U>E`mpTEjoQr7OIVD(+1{B(ut+xg2eX*-hOI-*bq0Bi#j21HDvvs3OOh=X-`MBqr$E{djVmin68fEdL51n$L!Rn>^x`o*l_g4#iuFr9k`zJ%h4g=da*A2j|r|UyL)eBAX0y*0eV{YoZj!wh`N8>`f+0d5;3kHW_tIl=Ak4J7y|9 zy=ot&yjeg>kG;uC?{*h%i3=C1*r5`X>8Uqnt<_y_IRLlw&c%OKUNw+vb^8Mivs}TZ ztE<(8J$232jPm9hN??6RO@0_8;e55Bv;`z=^B0i;5In({-iwIhcE#O-UIT9zM^M9+w!?Y^0`F#I1r&E zTj8TleF)ovxaXq8VO%934lp5cPeh5Uf?y7!XYG8+M%?8-aTqzV9Ma&3BNA~$B2F?A zCmB9wT(q&*%9_pm%6VnY7M-^8)Q%o6pGaJI`dj;6iC~E6z4ft7BqaAJ7=9+X)kr@$c+VH`gIVF7 zbR6lEIv(#SQi((=5vFD#pk$<1vd;Essrg2@8~(T&@6^LsiJD{JK`aLTi<)CQWYKmp zy-}I0Q%|gQJ0Rw+2te)wt}w2-i=GSR><*-{bH*Dl5MjKC5k-*_cUg zAWX>Y!Kh)SnT=+BKEo2Y-Eh`F1J-#A9q#l%Bs~z}<3og!>=_?rX#t{A7q^Va zqU9B)sPIZ6)xPS|?Y*Emn4>)wT|Z9+711A_U5xuiyS4eOEG%c?HzjOR z(X^OdqcSt7@SCO$I%xAmSH(Cpl5J^TD2Uy`=ZSVSppw$Yfi%|L&d2!*-^|$QqSg(y zr`8QoitQh7mdUKTVY1bbF@|x(xauv&5+SB0)vQV0h-&u zur)`rz=Sy%QmwZZwyb|FI+70$N62FS*&_L-|25n%T6y9#()1VL_o;B@DU=SaKJ;e+ z27f-PC+1E21~p>buBEoFVcuM;*=j|(5fBCkpKBIuDcn1YlC`Y{ax`hIPFsz0E&l!# z&P_POxUAB37WAboL2W8a5T)2<;Eglc#XeGh9Al_Ij!5-d#bv!#ahW9)j#)zCT;o1> zexUMekZ2X^`aynR)!@@+N^G6E{E+VS+tgmOxxHpfd(Bq0s8%8vCm5xt6Kx6qu{r$5 zrp05opg(Ri<`!+jm@A5OzhjS;$FRrey<*Sa7SKj2>TTq(e0KVP@_Z0_8UM7F-Sc zL7F??lnlIsUk85CekaCZm^xl(UCa(tma-0|njxafS%)2_xihlsVe4d)K}wz%ZkYWR zjwpAb&Sx2f_Y4>6{e2TdZNNiqMErVN0oKQ zwwOsB1lgUY`lEp!Fmw{o_YIu|^kYK}PDa(rL|D_v?L=?J)i@LR0nu>8wB({?-7`(5q8m&C)6k#nWphQPcHSYHyJtd1 zIqC*>u!>2wQ1%Xfx8oNbxndlKsl{)PUGbkCP@TWPELG;igsQp%MX=@Ro&DBK8w67q zV5YRDo!FlX?N1ig_UEP6&UqJqhI2okZ4-Xs+>bsl%l$C5wol>O7jb5_{7X1P)m;6? zIsn>nCJ(HdON~TQBaxP?m290KF4_ku+Ozh=Gf$G%;Q04|Osbo4AxbslkZP1y-tMKP zI_uaL???J}zz;1g+1>h8yjXe z)z^jh3U6p?#adQZ&c2~ zt}!d7iBjHb|Ejv|BumQlVW6YRvPR)d--7#3jbVBubD%%x>EL<%E3Sf}1(M zJMa3?75nZEZp1i|7$?$Z>yoX-yGxdo@uN$?_`SI6+!)6130L>Bc#?TdbIrR{=b=6t zE};$%85+_-F&^d!rvV~qfJjShOSTbQNS0Is{Y#*MTXEOvF&g-19-E&#tGT7sRu#x@ z^uhInjK3MS`eGR0-!V=k#))L}lF{ZROUn43C1Cs(+%?XpFUe!`C_Q8N*42b;Uwn9p z?7PabO(eF7x=Bux-$%SFjHgA>V;YT}#{c%?^h*Du6q;>US4;kV;QH_w~aSf4k4WDA{8 z8QmCDq2sCD6vhxa;LH+IS$THcnszAgMCKffMRtuOmV^ zqqth?iB20t(gu;VAsMwHSyF9$Ya4i}MR~Q+dD+EWjfBuPF={fSlu4+IWA+K@qL{kV zZO%&(NfSi!Qj*b2NtRR-9VO7j4{_IpG5O++Dg>}2dwV#CM^(23q&bzBUq4ZlaF$BE_d!9{RT>$VzqE5?%EuqgQs)y6g3ATM;!qYZt3s}B`(Dj_3KLhd)=#*X{q z%7iOjULX?tM9K@2F)v7#l>Iv}a#w7Lov*%Blb8L_=Y=u!heIXge`t8pVKKJP`Fkn{ zh{QgT*q4m#OO}-Vzm|agyK&cxW6FWk^0J?<`pjsKp+6&7LjFHlT{8RUCQ#AJjO0so$ zf60=vKDz`yKOgJ%%?O?hvvab}RB;Q~=V2X-3ncBq%h=Ms7}gt{uO|}gL}FdCb$Bz$ zlCs`!8`%0Wd2QVvIf!9B2$9g%Gj^{phV@T5TPG6hL}FbsvMw1|PyQ(dzJcIGJNqg^ z+tPR5v|d-WrG493x7Dl4{2EmsIp1f>{_hy&Vr27pQ`LT zO(9N{&povXldNJtmx$fDesFnqt}i%QtS5hF+}9a}C!A;J`oa?)1pYZK_X+%>LrK)l zA^0`ocVW0Ygrx*VMicB@k1^Jyfh`;M!L5R$A^yVHj^nR z%{-gQ6qIJ*4cP4vop2ZS28{{4fnzr456$5S!r=<=0U7(&(*u0Zc>vm@JOGh4li6&t z8xW32o5{RqvR5D@(q=O6nv9#t5a~lLrmW3mh*I9}$oIO(-aaaW2T-;_--`c57ghAo z_UZxt39fQ`0CrxM!vjo%mNN2e_>;=K`5@By8}b9OJIfcIF1$gxQqHqyeG$(bc!p&# zzi5YK*fTUG@C*^g^Z19(p$qU58JpJAOWfzY1Z`Gcf=GMTZ#CI12uGwn>;G-Cw;?0a zp7sAS8J8U((w_B9S$ozKrM#oz8+4CjeN+Z7p{$kZC6;clUSf(p7}pfgnxbq;uwk#3 z1UpvB;Uz{vOF1{J&&V16)@xY0px_PbyPh7rLhOe11*Di~!}$=CzJ}N`5S60c)^@r}dowg2MhKG#S4cM`y zT+gYj<;eAup{1N#MP$nX=!YwAxB3DTMgEW7@u<*b^Xx!TXtIGP-~_MeRJ*Vzn3cOe z0H!0JAT%>O(;egrT7XZ8Y*$aOFyGY$XruB9MA}wjy~)0ea6}r2dDUbbh#}IZ)UTL~ zn^F^LQ);HHO{s}e-huE1y2rsjDuY*0R?74WOW>%s%RYm?ed4?Vr;ctxjd>{DOhvkpRTcn80w_+1hi zybjkB<|OtA!8CiDOO~yg;2c5_vH*XOu~9v}!PCwg&^F}_h_p|AFO%Jba75atzNg7v zhm1)3)Td0wEhdSyPd!uCKJ`Q??^Eyry2t)LDnlJXSt!#RJhQ!egBMYs%Iys}g}WSe zgyiE2C=zLhe#-%Wg(tm-`V%wyD7)qhvZn}7Q2I2xGOm#D&9S(tyg&{ zD2+Tj)F(+AdZLu~TU^yW*7&FlWw*>dGv_Yr zoO8o#Jmy^IiF2rnotK+$J)G%PG6+x;w*ft@A?~snLV8L_kR;FH^@Ah((^LIi>RdBA zi8SAesMFV8Ze`1?bg@fY+pFUPT7S3c{eg1NZ8`*3!%rMtpDo*jX2wAWvTdgHtu%4j zzk|%V+c>zyG}>&tt|z4N#{)v`VNQ0d#xFSdjC$Nb=2i4>xO{B=^TJIQSf6K9;#~-Vm%rwkPC=`74sufCE`Jk;o>}is_QALU_qK z%_Lm3ao@@Q7KSgh*Q{-?S(kS&!_aOO)IMq@p&g~M2O{=rZy&q1W75V&Z(?hxjf*Z{ z>$RTNfgK1lLv~cQkKNEQX+!&@bscusMVGJlTKDbPd||havFowd6#m=c!_~)Zrm1-C zH7~ri)5@9`h~N5FW=fdf7UKY%A*Fg-7mkH%Wai?a5Y2ISRCPaEE~#6mha&A1N?GsyD_-4 zC%_=($eIyT&c=>LJK}Zhm^!sn`yzKltO#9jR8Yrfrf$YYauVP3c*sA%Z+YM+I7>SE zg|=m*sL=9In5If3qa#@Qd39u;Lbnw)_vYe;9<2!9kg?S)QcZ3w=2uR5W{*~Jibe`ON4LA%pFyLuD?O=T(5DTj+Y>W`(?~8z*GZ~Bb z_wnn8UvSI?=o9>bGmHK33h)acJ2ISAGo~wb&K_Lxz~%8{!x0nY@o?nO9wU1EBYykL1Y{OY7fN04Wu`|SJ~-Bs72)+q7>FR!0MeQV_qcEx^9fo(_0G}QOf%aEL?F9^ij&20;F)~`Y2SD zkKao~7QZ`^*COnk>2k8!IrsB$cAlt$eukMDUp=?M(fHC#cV1BaT3nA-a~KCT1zU*q zsw@f*Z=n>{cUYdVnv=0(Go9VJrZBoxB2`<6tU}(Uj~$SNCRk@~0g>c$hIz1taE|9B zBtC?uBWQ!ysgUKSeI~AkjXj#rFU9qo8xg0=ajQvMwQ@%7bnKz!7v`}W3FnLLI^1r> zGn^U8>wIqJ_0#ZMltuNK4-{5@=9L0+d&W+}GzDfAJdulg4L+*VE*+z-Wl-J>U)C)5XGbQWz zW5b%sw*R0hCfkLC*)p;*;k&qJHGaXtXL$itQjm%~q2o=sL~89=(;71{kuormw%Czu zwSTo!E1O&EXk)z0WmTvLHp`1$u=^^c6RnCK2pNfG_i|(KHmr(<-5IyAGg70%goH-6 zj3ZI>-fEx`i729Mo^Ep7Zi1nT4i#c;ph^^qR?)#0y`SjVJnN^pFbhBLLsE%Fy(|6p z(<;|Ua#3>EjnGI6??A;y$+^gUJv{-V&hP&h=h~!!J0FI-DEhrW;A@bQ%z@3q>kX?yCalP=|y=XQ?@L ziqUT{c0}3{?`}ud7FFjsgAn)~{BFYUa}meOcRCcm8}NID-op-9p-aZh&;8ZO!Bz%w z+!s-7!0Z7j8#9}LuSSoQRj1gHIoA*VG>8luGJL+^;PYI7E{5>p=Z_$Z9|t*%sckmS zOZ_bWFX&8;n${pkO_cI3M5yyk*5sp<_ido_Om>HlQr;FIrqa`vzamO`blFO8u#Z&n zQaDz;6mE`>dU~x+meClYVe50NplY@`Yhy&F2Rrr6@iRcGr1b|HVg{Vi7)ew~WB*FA zy{HRt|KlSD6RxDq3mZ&mt3NZD(BBE2mD}!*hCx>~9q%AlMI={6)X9IlA~2UD=Ywj4 znEim(88>7%cV?$i#+8+AxPD568^%G>wp}INk`831@cIFmP-y%_WC=OS*ze_C+@RXO z3s1a1w|jv-Liakx`kCbwJeas75|>2UwnefPh$0!9yd5>Y&U=asypJEX9vnfA56-M( zGP^SDJNR9J-;fA149hTd-79G7c64i=Q{PhC+T2pzRDX#P5M0STvon1+coU{F55K8X zx!GK8BX$hY)+ya_@2O{U+e>pQomU%S%qhr^VYhM&nBm{UaprTO{bn_ZsW3e;MI@$( z#FS(!_!K5%=K!|au2gNG1>D9BxaghtR0{tefiP93i`zdK6_!x)J z4u9tD#~Oqku(VOl3;b^2E^xa?h}*dhm)4)uG-_dMeRz+}YX1&A+4I6hhpp_>K6ewH zl@Wd z;*m(b=#s6%yGd4l9+{`3d%%Wy{B)Sd<7?;4o!6)xXv@ss0%U?Pf2e9$9-is=BNBf^ z%EOW|4@*{l{;tHmY9c-{%-=p4{53Z=Hq32kZqjt#5>ja60o8bx;NUYnv{NRBs2CfE zyEqPs#37M(BA4tL#Fwo69CCxTXl*3S;pZ|roIR&`UQ=C(onf@Z<^4CHa0%Psi9Ubt zIR1#lACYWOGTNYI<>xP79{ysu#)1*V>9zB>Ngm#Uf-lV9XMO%Ib^H;DKO*rb8Tpf} z{QR-O7;QdPTHMs8csO{)ogMk^G=!^n;R>pT9QTE4mkM*bnZXlfNk?%f{J!VU)k?efw*6 z{1J&iBJn2~`IGFU=kLIr{GGi``TL&FUyI|9Nc<6rKgr0SWaa1YOSo6G=Ot`^lf(R- zSl?9N(lGsq(akf;QJQ44!~PLJSl>;4a6ea;5Q#@3l_ip~ERn4IJTAt)#>bS&wK;g4 zFsG%VX=XXtRKHC%o+~)0*IOfg@krk;2Rc59#3zyVzLe~F#Fwo6eC8{g$ABO}&^N|);u{7Sg>5nArHOD->K zC*dxkPQp2@EukL5YTQ3K_$+(%%47*s9IOU&v-5yNVu?s&i;}HIe96jhX;9@$GyhI}pRQ+=mzj|Vt=Boc>2@{5wuFG^N^4!JaL zw44r?E!7zu&f%C_iQC56Yk{*OesLe4zcZZ;5{W+|`9;a-7bPn{fB9^1Kn8!UwXF@) z$2HcLyt6Q?4L(zmS-%PL@fRG2MBg&ql60_Q4HJT*hR>>Tn!ye8j z5{W}1*`s8%N6Elp!L1UG4<8$`v`Wa}tZlAB)vf?`U~JuAoV`niRb-1~6Yd>m=uDrX zqfooi90ejVM5J1bWUCNYGGoZiP^fS-6!@k`B36~h*L)5PS9x#|oo0OO1sM-s;}M;q zz&RPwGJ|o*A`Gj|#8G$!Kr!p!|U z?DyQ_HJ#=o6ii;UmBD-GnupNaF-Iikh{T*^WKObjGj}QO6zzKnGdCifYmaZvJ`15> z-a6NfdGA~^5Z-mn5s5h>F(($o8j)BdQu!(w%U8+D%~~7obZU%` zn-FC!_nd=*`OC^4YBAwD9a=lq%e*(LN~+Tli9I5+#JUok(eVAbCQuc$v$f4`sZXWJR_sL%ze*iZmwgF zNX!w5ImyVJWaVa#y`9mXx^T_p%rJBL=3*31VAi@_u6Y=rbmc6O7$i~~Rx-9>B`Y_B z*WykSV{+}Z91OY&kgB?2AE;MIy0Cq#h{A*aIb5xmnCtTRAPvV(z&YC1vhj zynVR5o$2S`T^(~oVva~TSh8h^D_Oaj<9JVWW^OnKj|wvvGnb%X>Tv&Tc9&}&!3WO& z5s5t_)m9{9ZAG$jv$qg;itB+oGR$6%Sp=nKF4qi#pE>4;#2k_APO@cqAIZwiT)vXy z)G%}T<_{D>VK&>#HFsbamvf24AdyNA$yjnoR&EA410%YGN;u~p7iKWg%z?sb%*Nu9 z9J2=g;p~t|EE1{Ykc=gVWaVZtpZ_~2gT>r)1`6jcyZ_5IU*JGzgG6GFNd8YU`aj9a z&E5jsDLNNCY=h0=wr=)GXay6O&E|5=5}4v_j!3K#sb@+u_Do4uZr1YI+#wk@mwS#t z!PMbRv$2t=Z%}G{n_VSe+*JapTYfD2N=GyXuUbmo8Xau(i3bQdd z2&1XtI$!WT>K7e@L}HLgC5L1zIV3ALgZvsRI`cc6Yi|xSm|%WI5hP}{!@VLbp6=J2 z?{O>=iA5rn9Fno*kgVJ+=4*4jlfh!nnH2?-m(BjFVSHix3uaX8-IZ^yWb_VE=R<0{+7S9Xl()jqP91z7$v z0#yEtVVA$+b)U4gqg(q99V08+M^$u;tZW}u*>O^@_LF;AfHkjlpHyjgShKEs&DM@o zdu7MT742gxI!>-^A5+_acshsIgY|w47SWoAAh34F%UGjVuGAz zoKsz6{5$c)XLtcWEg;+=v2 zG-N;|wGzp#NJh6JS*BV!x1qydRk~wr<)Y<-Iwoyh^yHxI%7O|qmd1iIxW*3?u0jha zZuSUruh&%tF%F6N9DYl}3Yyqb+ccM}e{@|zi=ztSGNcg&jllhagU_%Gza8;A3_l(x zfOtOFi8ymsBox|4<(-5xpY>#%L5Vj7|4A`KQVfw4BN-JV85M)2wzjUq(T*i-F0b@1 z=jvHMLWo)TbzVIyP~6cqm6tK(!?{Bu?~LiyF{yHK#h0;;Rxpi4`RNmgb_eL~;e7^Z z2p+J9EyJg&Ku17!31n4#UGFXnhvj7aaF~kZPZ?@@QBX$;mc5SuT_M zK0+ijsUPGH`G4J{)|bbm?k%@T-3ODQNkNHbQc#hZ)crV9sSn@`%kdWAKbaJfOo~V* zB^gahGMbcRG%3kwQj*c6B+F$|+kuxF0-s!7FNNIPX|i6}OD*3U0qn@`rDilX*B0cb zUP3Wr)rzkBsdw=_BlJ-Ae=%NaC>WMW5y_;8RP~l@749M#>ot?~|j@8|JSwkOSJ3n}|;kIM*I-u<4^)LuIJ<^;Go7Y`= z%xmtf=9X65Ca=p?_BV@hTctFs1D#nB$*hP{R#BJici>4f)~Y0X$;s%oB%{|-xb4`i zb}zeG<*Q%ak;kmi3M|a1Eh?S)HLZ0*w!wqZwXL;{duL)qGBG0cUrEMdQ8L!HBzx1zSlg1U!be*4J6kvDcF?Ew(VN(f+s4E$EVqdz z?c-YGOpHh-MkEuHj3y=-O-wSHm}E3D$!KDdZO2~htg_d^mVuh{V!YT-@|u|ch4kp= zdD9x}3oj@q7v6p>Wu5G7S0^Kqi4keTF3DK`l5B&IdU_k3j3%aVG%dK0@kuNNzciG8lzCYH1=_DyGEL^3fV znV4iWG0A9RlF`H@qlrmI6O$~LiERhtjqP~3@_MmffSR*o3d)V>3)PX=i`nvAg*mb7 z1{C4MO6tX~1LN{yL^3g=l=nx_AlZvPN_nq2*&9wq6H_>vnBs27CU!Rl`pau#Pl1{X zVoab^uIt0?qc7|> zFs*`-NTx-k#r7q89-K(F&PP2x4kSs&fo_GPkx8~4o7OAHH{~_0m7t+6reOS9Ueihs z8r9V=2rYeDn5Df|MAv>P>tL@sFGeI&BT9L!c}Yg!B^hg8lD+3-ta(Ys@kxc-j!jLw zRiB8*FV`IVe0^f?yIno6tI)dkPljzH0X<+DjT9wP!Rp5Kb?jw5@@O|USXvmefn!gM*#LcRho5!?9 zO`JM@(#X>$o^*E2=&7S7kC}Sf>7#23`Re29g9~=U#I8dADX)p;D;O_;chQk+uxL!}+*zFM+BCBe z%i07JE_AFriD_YSc%n~fuXf&xNTx+3?WOc!|g=a6NdHuzi7m>`1 zDCMoeoh19Ck5b;tPR2PD3P+<-IM%!*%Vl1rDHMyU(tq^kHLmRD^_l8&n^)3;@kM7| zL^3ZTnU`cVFUe?LlF_^*qj^b2^O7u=d6lMMENVrZU*YA-TQEKXLZZvFErbk>BpY+w zC$D+2I*--v3UOS&LE;70e5 zeo7Kn5X;#mb*Q}CytCh~Ih-6koGAqewR+7=IBwOcXG%LwyRtlHPtV-;y3TYu; zh&IYc>#e3FY9WqmZ7IZC4KKXkw3Obe(X|eVWL88nE6He9lF_UrTjyjnE6He93YW{Q zO6;xvZ<^Ja(R!=n@)m;rH;#pPtDk**yQo`z#ub7@GAkmPm1Hz4$!J!Rt#dM(m1Hz4g`-)e z*RaIuq8OIpimo{qZsp>W;e{ci3%9o6dUS7I#=(<%d*XNHuK3Rm^lE2WxHZdCkU<2` z3oiv((>IG+8f?{877~Nfu{_@Y1^l|>*Uy)K2ffpLrtjj+=eh%D4D@>w@t^v2h(t4y zR?U`dg&$5Ix2Ne_N@6bJn!6*LiDW zTd=PBvz=Dc3~rZ6;T3&+3e)RjR;NSSvu?uQXx|}!>o|D_(R93{iAXdNX=!%J9!C_( zGOerxG+lX&Rb@CVx^vLb6)JWYNN^@e2;#J4)3lK2@U~RYanSNUJzYwhZwl z167MQ_F7r9naj$qtl6TIEi!Aoty$MG77N4nd9Qb$if-@qK5K{fdiSl_YL}L;^Risq z640IH+UCVITgNRPyJh_1Nt@5Wa>5+9^WX#)t?1=%H%&Xf0>WW<;3}^JDEEfbH{&XT z*$*dM(-|MTnY(xg=Vtr{M*8;{hheV4@7T1`f>owu$xO8KL1)0_6?yfGP|ke&3&3l` ze{<98HxCNM<^49{7j^|hyL)YXhT%B#IgZ1biJpf4AAra&m~+=^W?G-zS47I(HlPL&quqGz)P%B53`frgcO8y-bU zy$2|_QXj-slEEL3uMPE(VbTi$Ukq7Psf@EPeoOE>rn6EHu^bm9h%ja$Jj*@p99HUJ zkAFg;((w?fRh_M2#qyp}#rB0F`5gP!Iwf0*@RBJ>6t7r6&~~QSqdP11;BBSYci>v7*ni-f2V$bn&Y>S^`Tm2k+x>GEX6iXzHlbtfqK%b{)^Ebf z>61Dxs%UTQSHWVndMQiO_L_C=HS61JHni7lY_HkWUbDHqW=ng`R;=O9_41bu8h7Ci z!AkApF6@?uC|$Q&35greyGDR_e_lvFavDszL;3gZ`XwHm)l{CFI9nCBghGm8=ys#oI|t#309!(5KvchlOO z)|zD<{{9Drb5E<08J5AM9@MQ|gPtG!W>Qj@OQA1qF- z+Ecm_Fb4Mu4&I;TY7hK|`@*}RH$Kx3aQ+<5_v74*^8+~Fjx);QHa_n|I75xzG5AmV zC6a!L)TWYbg&!{3rV8>LYo+VDwf4f_P&CE6mp7uV-Tl)^Y{JRXAIFM_5KcRI-SZS}BW7?z%mos7oe)X>^6zkY0OQ|-+9 zmSMv#m^;0;v9_h!c9X$0E`YhME%Tmw3*L?s}PE=Sf^3i56Q zdC{dh!sI;>M;@069|m1o*5?a$}9xhq9&mY z-Aa&w-wx(SGXpdGHaP-`L?BTK2t3viSc-z>#yl2yTA09S*)ghiZhc8Curkb_W#P}^ zEoFg3B9N#A1pdps-e>UQy-VQ#u0}f1Ma{z&_;$DeaUXP-gte>p4;34G{aJ#{dOjNMks z8jB?^pTD~)gE-8}&$5AK2`K#SCqfj`@@~Sri9jL|NK^s>?=#v+;5~+h0_E;0q!qP?{R9)eYdQ*0o>}-W}=IEL*U&>HGHsK!>C z)d$Xy{W(#^*H)CLOQ|7>ApY*`wlNBB~_J%^W zRou(dM>8C11JW4RVxZir`#P>txq*FBb<9kG>Y9L$j${bNVVE!BSDnrf(^_4>T#ZXv$ZH54I>H?}8RN^H$G3RDP59AV`uRyTbklyOb8+T#%)=REc*o*DWdI_n zkw^oVl0D*w>*S=h!R(^t)xN9Q8bCNBZao|PiQ(k-F?(h9zg2oP;_tzQRoO!>F~n*E zKX0jmSBX=@SX?FLbP7D8J#qI#HZGzD#zE5P0>^f*=^Vta?uOc?nT_@KwNYr5ongaj z>*_+EASLW(b5#a*qVfUvL>+>idUz`hLBH||&ueHxZH0@jxGwRd5HvXWtb0KXe8&O4 z@ElLmP%tpih6M1P^}dgnlPZa%N}`mlS1uXNLNXiCs?3}<;BQUaioWT} zH5mEW^43lWz&RZqHCuA`RUe4}d`~_s4=Q6%ocTB18EbQ6Bg$YLh8c|Ct-IqtJ5ZKp z*#OqHO8I%Esuojs!jVrT@`*&gWF%j*ZAktS+%(SR9Pj!tve((OZ?e)=?%f_MS-CI9 z<$T4t93l}X<^8$=ajw27i@(wlPbA`r zM7(4qUb1aS{9U-|)R=1J(7YC(ZAOnRMA%jO-DU|{%^uHLjOBmZb=(n20YoY5)|6}` z?jhMWRKT}z)9AkDVaq=yuL3$P^xjqC-8KT{ApTKj`9va~NR}@dEnl*2Nc=Z&(}^*b z{|RF4AjeOhbADw16#-7O+n4$?1mq!WpBB9Sf`NtbLJlAf<{?UtAH z&OY2I;p%BSHc<6)u3;Wn7`#X$de}cDY1-{&^2n~=|dV4{91PX^L zZ-1cNL*N5(wF19N{CNC(fW}oR<8a@%@jE$Evtb+)@>?2YFdoZH|-(e*zja7n%y$jO9qC;b~(1FXL%+RT} z)0N!tFP9sLqzEGQU`j@hBiTo!2##V!2gSpRI3P<4H|>%lL*fN#WY}S`8X1MlA&nH1 zGY)ZO1d$X%q{fzHY-~yP5h;WNE71Y-utFY-%^Ci1c|nS}H9l)B$;=wXC}Lly2qGzh zNI63?<_yU`B1J601H_dR`^V-C8%i%o4LhSc7E?~_j>|4T6r+TmP6iDQ^oHk!-7vqLUA|S#|b@ zcz|dhQCK;j&ZC@kH=RH9UXV(j$IQr>{IV98U4H4@eZl8VTD|?1QwoukLX@&OrIKw% zdXjxaIp!fez_~GPjQ)9)l4V%FAhrDah*-5$lq#p3?%WuWltLt>NJgbd_7N%NK|DZo zz&@N)4os$$&~SZ0IypGrdmR?mNl{hbX3|eG08q6#bE82P7?#dih1S#WA9twtg6cPw=mLp zW|YB3!?K);{M0}ZyrSuVjN)Zj z<<{`Ul#c6c1y3Y0h!iR#*%s(RvNwo~?;-=?KmwPH4@QuYcs~h;5fsGD4M${kU7y45 z(zvemwxke=93s6uO2(H*$=)DxqFP_?k0K`=UQiGx$7J_jlastxQ5F4{EGa}Hg-8{> zWUN^vdxJ>fET-Y$1GmKdE^B?_h8`5e#=o++yLLrZN>f6XVNS~7@429d~+jATfbmW*A?PDWJ4{<8=& zoKS^=*jNeM&+?ks?-q?>$oT9YL9>@gWDtoA$w-D|Y00Q4I~j}+4A0-;x~ZQ>kddg^ z7jzWF#!K1R_=U>`@>&cbKe2=mi4Y<+dnIGDSF*H(ls~ZH9%LXKRpJt|I)V^?(XN8H z*grcL2fJJpL&Og(5kw+_NFS{v<3}sW(h^brIwOjRjX4m3;GTkr`02q}UDPkJ+t%L2 z5OJQZFNj10k%*9tL`asFi1NFrC?Z~rAj0p4FNlbnvX_XBCG_fg z$W9J@7U4O_uD3saA4$W9`gJFEb~Z0#@KyeiSNC8Z5NS2i#rRKL5Qz&St)wg2%l>iU4~F@0!Kk5PxwsMe zI5i6wy%AiP7_9u+colDyS=dlDU5~s4TQPhb3_XbtBJn|_Ve68u$BiT_ylgOds8~L3 zLO#Ng4t#cG*OZOZBlt+3g(UaD#E3~qOtYyTc?h;*`0#9{K_oti#D`?$L$bp8VC+z_ zeB6m_gqyc6AA6L$bnoVJK0tyri40 z$K_>eL^%n~Ws-YA$v%}yN%{DI<%39k5UHF<#&RNA;e1q;fRCtpWY36lVq&!NFC9^{ zos^W15ta`k@j)a$BqJY^70w4kii#~C=?3n(U$#b zM5Nbr$@rQsS>Ze}wy0R1(ha0{dD<{h~ z52KBW`2D4BU$0xFzBdQZle6! z!+Rs6X3I2M|AdaVw${b19qmC#SN_ywpO~ej<>s^2uMvqGB5@-bxsj}JZWw!1EH@nb zc2<^m{)xGB6Pmmw_bMl1?v|2rbCu%D* zrDD0c9r>7+rTnalsBhdju>47B#?>=_rYU84dD!|iB5^{bIU^+FoDq^0&ItpT%FW3W z5uCW;VEJ>BeS(@&a`Fkw36VG<5+{<86Uhqagz-zoauQYl_eFBzM1|!~O4R%{CG}r- zL0|G;MB;@=^}l2rz>8#s^TIHuVtKg(`3MK$9|0LIZN6vT7|Bbb{$J3MKQa5&W%FRA z{m%R{9!k6ri5DXABH0E!w`7I$!l8XFDH+q*`2xZ1^tw=u795`Cq&|eNSsJUP9&Qif2C(jWzWW~2oakZ zzp$dWZB#{k%N1K{5HWS;)V?2V{rAqDk4?tmW__){e*J8$*@Fe_8BFD2S^2AWV1J+a zp8;o6vDkdiQ#I528v289zwINs*y}EDahG|?Hy}t(H6-na0hVG{Lsg>*=^5T`f zjT_=k6}>Yz#-{*piZ@mF&fL;>RUOudZ@OTJJ?=RjuB552Z!GptydXC zFukz%0G(%K4*@kB^nIYY20aHf&!7t2_iy-(!Y|l1VlOS3`?$@=NWH`G7yo`8zgp}& zHuO%$a~LPc^gsp&nvLH!CQh1!`4AT^S~jPvv$=gSRYqmDjq5BJ8Oe zd9zzFe~$1*jMxFPUp>(C_Leu<6QW97{CeD@)-!oRI${Lv;|DN`y{#ea1t~2>Qfnvg zgm{A$`_{sxs_2i-ve}j{D&L_g_)hcX=kMZmQ%?(#b|B@7Z(PCmLZlBM?LfLOG;=Z1 zGmv&7y$UH;go6Qi6Tq(8SVZzuL^1C!>?O}t-U=VZJdVjF<5k{+K8ks?QgUDAJ>jF6 z_d_6BOO^M6kL34gRaIu$CZd=(13A%s&+?JtHwPLjoz?#Anu}Gq*jQt>ET)+QX5WLo z+yXQB=V;CG7Z}{R*f%<4a6E^_d{6v#<$q>_!JUX@`iy}EvgDL2j|Gzt)??RFXRg6I z=TKgs1rYyW9@=j6Nf?i35(z{ifhcBFFWEgfMKV_40}a(s5E4gEl~zy8{-HR(7WvMm zrw=F_Npm_<2Z5g2fWvy?IXs4QBv&Qr>7tJLdFhE-Lncj_@G_&dzu>Pr{DO`53hV5f zzRnKAsnQvdbVd~OzJaqOd&oz=QJLy8Rc!<3R0ehF@Ix9ZFWDVhU2l%vT(|js*ws)u z{1EfEc72H1+q~=Mp*YT}d>CZU81GKg`$fXY>=-LMa(X-X#=P#8wt$99HOc`NGeAqLrg80GhoAc##Et9C39B}s6%#%~&6(f~9IZ26 zHfLPepXQ9!N%vSCoUyL2VLjSGFQf6ZZd#Dh_z7&aDbr{{#b<6n6R2Th@5GAu%uQ?p zHEcl>D1Jg^ruNL!AjoX2bb?mPB`x#LSkmQ@n4_W8S_Dmlc!NFxbi6?PgLcDp=fkZJ^Y#Ezv!M>C#mGhjEij0N{5SkY;TLR2VsAbE2(mN#P_87LXd-OD zzVRU==Q*f`J*LwGm+HY|&soxb@sj5Du3*W?dK?sNK`APrWx$Fa59-|rS6=HuVJEkH zth<@#tMOm0*Rf#1;+8Iysu5=0VF~A6vT&+$)7*vV3v)`My7%=SRQD_h!N%vh4<(7N zMn&)-%nc+Ol!jw~yvLQGP>FKM^dEfC-%peYc>e*5^%U=%o<=%$% zy$!GQHehwpjlB(zalwM4NYm75DUGZR;&q$~r#6 zEN>m3G;-%Ue}U_x8@4Q;x6s4gP07J)6K=7lVFyp{S-#%u+AH3;1@A#91dZ#>A-xSR zb6wMyc|^PcIeG<$qX6uTH@?!_xUp~MMjX2JidBzbzd7L#%dj)0485qj6S{vtJ+Xc_*Uor+vMS z-&6Q~%-a>`n{CdVmW2zO+vm5nbdEZH?vmEF`Hfi3wh7O&xPER|I4YvP{^W@bXEjZn zl_AizzP^4oK3qCiU($YQYy12KOWNnPwRDx}4x`2*>wK1@@T^lp{({ecBK9$T()AbN zXPGb|`EgA(NzDaYWdOXf-9u1rCX84M#@Ta`*SiHrPHn}BJ8^B(F)`Awa3{bzxODKz zd~saRJg>#u%NrW-;@yDz@Hw!t3AF_m=mKs{I*3i&#XN*9+Nu$>$Qn5Jz#4~ub^f?S zdW#P8He-3=bbg5X8i`|QCxIWjb*R_PJbV@@Z*x1+Cy{;*>5EA3K*~DePNdaHzX3ab zhdG;Npvw4qqL_CF_Qs9u3qFc@^eQ}~$~(YEF^{jOI(LDOVqP~8?Y+vo(nm4xdLWjD zD(_|=#k?;7vHVndU-A(?O#NO49 z)?!OpuGuWIU1RPB==dxw-i$SydmFaJ8@KoTVV7R~zkHk5RUe*#Drc)F+A06yAeb3D+!2Au=+RfFaO%`xZ_D_agU*T{N-jxp#~pv%*Wh@90@m^B6S}-}=|D z%sE%xYfn#vK!!j?&Bg=Onl7@l4WdHMGUyZbI4WnRk)^BW?#JGv@C&x3M_`p`5D}OT z+Zy2^fjs9B{8r$1aT?PxahcW~PneKuKkgm*h}ziw6!aPW`NOu)h;BDEAKq-{u1 zIJ-ZEbOF*8NI3+z8tFOErc8@SrbQI=`EeD=Jj{d zk_8J|I_;wJ?wy0{c%EDMpU2Hi9j)SS-hA2E2sY;B1~4-e=_p@#JCw`(eGVzJhpNsf z`#1=tY$7R}Naa{EmSf36N<0iZ3RU8DI5#{2rK`k+$x3X$q-CkG`S#|v(rNN3ygoUa zq?LyiIVGgXyM0A|$yX#wuuKqlSEfg-& z>vm06BHD(=H(u&1ajCDw-&iFQNr^phxIWJtz z{X0T)!JHR)>h9O?c61jmxcO-A2y1gh(j1XACmA&-St)Jq3S2eZ6m>OsSA^#5>=b#b z?sgcCV|GQ^UFGh9-4RK9L@{G+l0Ap#l&qB6OXv4o?fr2d+}3RAOKj>~5_zie(D6xX zEXD?pv05aO7K!BdB%|Mxtdv^h>p*z9Dp!kNj7-Ph+4ypFwawWOAdD|uNckkV>L%4%@N7>Nk-o%St&JlJFXg@ z!PvFCS0Xf*p`&?nb60aA8a<;_8vQ?84--kFM2dir>=it_WTn*Tb+~Hy_0HAkk0Ui2 zY8)1##|y?emYLcXWPWmO(frJ6l1Q2)QiEEumvKGGN~y_ouO_Z0w?}Hyk5Zi6v1D#r zOQAM7+pS-UDdp$bQcfgI5=oPiQInFDQj^!?s^K{WTur{7t0t4@6v)$E?u#zKM0=+g zO`c{oNhD1YNt2RMlaiHElToGnrigml=@xTl0LW93$7k=n$)|LG(Uxu^X_82ql#H5` ztdyGU!&SrM^SC7FnF1?6aCAk|v3yNy(^5$x5lon{n0f=z3R^ zNA8US%$B|dp4vIa@5_Z$J4cRj^;t{_|C;R&Ba$|WG%J;4>+wvIl~SAOdKF!5-WF+> zDP!UDw8}>hE|nIawl+y5EfVQ{Ml!z7NLETMeg;g%7Nflm>jR0TJtApOGHOqhF4QeA~izRbT)f{`7X5r|wx@>4&MW9oLU2 z@d_t)vJOXGvnPW+_Xiq>Hq$T@{-OZ5;~>i%6Ul&E+{tcF9pZVzA)$;hQhXafJronk zbMW%&9f{wXTKs1=)a+@ZQWhe{yR)SoPGLsU$V&H~3G7Bk?KZ|YXa=&4@^A7?jT6Xr zlrLn$Jkd|_TBGsfwl|_tm`|v(`*5TqkuuNw_)#j4VyE7Qh{P3<0@Ng9fSP1%drG$6 z%95>rTz{rG0V*l+l&Pz2q-%ll92kxnzVfwfT4whK+Dy4<8kh4oSJNAyFzY%}>Mh=y znsws^euME-%-cq!V8r{aKc4Cet5G6plt{I|WUT!qOV%EuIyYgL*MvdbJ`AVHW)F+^ zE`_nzdWg31It{|>h}UHhtjD|9AX1*W0346K*{Hc3`%erN0G`9gKNP2y%BOk$53`K`QC!&Z*6cOp$sbs5hBgslYQ3a}YQMA*P7E-i}k&&W*8(DD_r3->` zDf+wX+|mR=B?40N;K;6(B97P~s>d(bilJy2v?Gd$L=llFl8h8dRsxES#KlF?ID<&h zVFrx>I@F-zC`woVxDQ z_0jtcB2^zWXbe!DLB&z^NnGcYEcMZjh|=VQ*5pBvT~Vdv6deGah$13UM5NLr8B3F7 zC7@_8LjozPF^ClHY0wy;;RY2)QB9g(Ob z(&q`u_<2II5>U6!kVER8H;AR{1%pW4j|?h~x^!PO-MZ?=Nb1~vzF;*L3>eP2fxci| z_ztXzIX;vtWuf@0JQ%YJwve$>Hr`Kxenc0M=ps@HlZ+)yvJ%jB2a2!gy44`k zb(=wBfNn9UIJ%-7;tdh6z!`$L@?guZ;bO{HDe3w=^dq{6L>H0hl8kgoRsyM^J|y3&m>a2;YiceH0hl8kgoRsy;- zQ2^<>8{Lex9_jkBL8NPiLB-K^1FjPuQRvcjMI>F}UhzaYS{|g?m0n8i5buMIL>ZAN zBU1e(8S5{}NNo?|^PZ6_KbS5>=9sD#=Pf)vsX(YG(Y(AX4=|28{uF z#h~J-x&_ynlZC3=B1=``y(?V=UmncaC1Ofl!Zt!rqK!zj5h+erGJgG&tOT@u!w^Gf z_*H{Q+x-TSwtEdKj<%@Q;mwit*Nk*wf_boISB){{tdz}-2caL)MI^e2)ZCDa%?-&) zK-YIrgjLEOGKh42%OKMAph3mabtSG7j=yp1u9XpVg<}!(;K?o|Q|eN+5_%C$M52jE zF%gn6CPK0j&~%Dv_pwx+Xb@>S$)GVn4F(lQQy;FAtyg171Wl7>%$YiK;^{L^p4~8c z&ZJpW=A3@Uhuv-{1)S9*U%^&P{dF32B+7_H8If9rlCf1NSqUin6zoAI zYq>$B?2`tK0s6Q>#ZeYjvL1|}EVLp}K1|u=fJ$Amu7X}f6Om{lQpu8xB}=jr(6qvQ zvS-P<(;(9Hd4t9P-CrBnkB8){+m1q$v;x-Si_Nzy^=zr}r{dm<$zd@|Y;VI3Gv{X|Fecl^Jh7`dTP)^@ zJ!WS0^5ZdyY`n3iul9;*7gTJ*g*=2b<3ux=>^__OY!$h@=HiqD5fHQT9(|K#&DBE|F%c)|3#`E1jXQZI|}pSULy z_e3#ohrhSVEHWZlIk_LGxMJYlm=7J(whsdLKfu$4C;WA}|8xZRHh465_U!~?xwBuN zg?+VAi{<~rw(Jv$f1;RSU9t+;lw{@Pe{jn_;-gc7hh6>~Blu55rsi${cAB)@4dD9P z%*EgIS{KXzzijy@68}WvUo!G9+1rQzHQ+z|0^{;u8}aoaP1tMhhF~Xp%iRz-9ZNau zfw5?osU9Gb9T3IL0z8sc!ww{S``E#gu!Hb4ovs};Mfd?HrZ#u}?NoKS^Z(F0%gg_M zmVYAgPb5De8U27{Zy)}n+5saX{D2ME&7FNa*O|$FHJjO56eH1_$Lzol97MO z-ah>Q4CO!kY11wLdqnUb84aAfUDzoDbGM5V56|osN@EvWZ2N#nc0m;LM#35-$Pj^@yD8WyG;=qFqcQ7dIo~C3w)F&&Y=KC&AQ^2zvbT>d{0M#_yr_`t z7mm-}7M$?z+)d%S(f)VQ+)crIS7uWvN&nKPtSu197KmgElF=3wuyA{`nj8eozgdV zQ&^1))Yp9Gni$24;G+H7G;=}dv=&>Jkn?*|d45RP8Y-4yKX%DJ1u zL7Bf)g-wCakW07{pD_qmy4;!qkxYR|rXU$jK{A=btTXcoR--Yj+OX@;hMJ}e>cYWl zbqH-+_1doSnLFa0)k9y`;?v8w{q-v;#xMsHbtXrxO~PZ`jL4c=uLmfzIrL$#YYx9W z43Ue@deiAzkUVE!{5WG_JklIOQS#~Rp%NF;=EkqtsiJeYheO|&(KX=uVUyrlT*nFNtqkdm59M^V7*gER*M2cy=4k)vA+>X7jb%bLY zpT++07z&<4XYm>Qu8*{iM7vUf`RU997xFjPJU&>LcmLDY{j!)x*gE(e>8yj#M(Y@l zl<|#x&cHfewAMi+>mZVKNJi_BEPw0BEw&YP$Bi_BT?Q?-brp0FUP#bwKU^4T2hL>P zxtoBU$UAor@oeTA1J4k)0X{=6HqhzVz?0Snh-3pqsx%~Hr6F1VHt;5IKcq7SxBc*V zPNv|GEXdsy?5yOun*!H&%JedkY6^w4ALi{IR2D=s1tOV(WHbfI@;8OSt1OPfOHi$M z9n8G&$|9X*xRpguq-8jR8FIG_JL7upmT@=gyxc9Lkc#3x)=3b_GKgdulF>3GGnO&R zwk%)iZP?J;u(7vcQ*Xl-ycHymir5ivtQ?qFGjP@nwi6mE2kL7FW}k%_uH!Q+2PTai zIQwIK$KWyh4xDvfa7^96?1gI@wt--;uW{Q{92=i>KoidDS*1Y~YZ|t5r=KJZyQoB) z<(NqaEPo%a8b1`nFs3=@p~(`jy{@-r^N;-z7JUs{aox)J)KNNYq-pjhuG_G^r+*iW z?BFpN(J^(@^8N4>@kJH5(o}O{oq?V4>d*F8ZhoP!af7)=lgagH<$84JvWZb5%I@gl zeQ`Wbe987zzr&>~@r^4y+5u| zJ#bcamb=8OkL<1d!#O*5?z{k+f5mx_vAR%w#Dk1o{vo5zYTP#2Z3IIan^cA0KH;RC(thpy2YYLEn08U z7N7;@$~%F6WX?Ehi03_L(D6VE&E7_!%&z53>>Y)iRp7_%H8j3H?7XGi1=-}#*czVm zVaOYh9_>yU;x;)EDm7uk{Fdo0ovqDnt(Uc!nbUcvV5qu^cAEYICvH5dy#_a?){K% zKso{GYe+we6vuWiM~ZxPe-Y_#k*-4eJEX56{XNp(A^ii=p?HozBCSKZ1?dS$|Adq} z|1(lh>-`o?>y3#>u8t_i9GSgU%!5H@DY%|3l~}4`JC~|RtXPriA9|K=uUKA7_d++f zJ-(!JpyKL*eXrU4t8=kB!c$sV;%~U{DExx$Q~>f-5eQ&NBk>pi<{+&H@H;kSNIYjG zev|P#V^92NHVj|&tD{r{N*IlErz8XV1Zo&#KqGtu`Z}u|7|+S=-d^5NM9*j&jfD5c z79Nr{%yS0k9i?N;|I9CqjnBmMxt*}9*KM8w=~(>TfRxX3B2toc68;lOL?VeuBatOr z>mL_0SC@>CmLA>PC-^` z`L>nCN1TnlF137DMZAHf_B+5~AHj2Y%*puO0slg*waDMB#Gl!*R$~R(`|urt_4i`t+XW z)7yxYW^lSs?@UWCk?19gc|XBXlA$$bkm!|+^y;_>PdPTqQ}QbEl;V<)UAU)Y>oClv z>nR^}xlHdV6I=%V0M~T3td8=L1ed1C66PqKr$o!No1VPR_muDVJ>>^{Px&#+5s^3| zlBbl6o>DRuw>PX+`7LB*VyG~=t;*9}0@C@)g!<`{gDpXYtNs*MS$NYjOjNp-<$s~j zj6{wOKspxbfk-DKJ;*OiG+_BkA`wLt^YFssN%o?TRG1`VVbXD_g(+xZgc}*}#5qUe z+O=LCQ04-25cX1efda!#iyN`;v=CoBhX%=N`++n)RTJCVI_5QZb#xw!L3*PPJpyyA z&2MRzP_LE2-EaYCbE%tou-|0l{0wB8^D!*y>U3NB)N!yePb={nITYzAUkHb13eIe# z%qw0QP1B;o@<1dWh&1D*Wb1LfWP`8sn{n@O2!gBgm$T}8L0d<2p<4e6TFa)P9%#MZ z)jG>Sp*lYZ1|!=ilFo^wbIGW4$p&BNx8UC4@IY7RXJpm6CM77))O*6F&bbEyQ!hs6 z|Fm{aB%KpU=aNz9k`2DjKaYEdCv?h& z8+@IA9rs?4r5#g~Rp(g;n-|E%+%Oj$Q(h7-{%HL^k+>j=d0U_b$+r5)be)8{vdZ12 zyc_raSQai~5nP16TGSm>AOkOt50!??>l_A(^Zjcq2Snn4C}uu#NJc$NHu&Y?%eZ$q z4Bqwq`$ll!znZD%il2H4X5pVlgjnGC>5`O#ChL=k!~u~wkc=EiHuxNT3HLrHOF7sl zHxA4jaZwa}IP8izX4z6uR2%4c%K?!%AQA_XkpsyFpMxl0^sTIIpfrPs3-m^CG z4kR1=a&RZ^9iCpq^+O+ysE?fiq6I4d^l(MYaiG@ti}69%+j^Ktx+hZTiDVn_{E`j6 z?!Sh6w`8&X-6M3Lcqa%C$}EtI8;%J1A&$MYR1{So57=@*Brb^bekK{;&mZHj!kk6(k#c4(`Cc!_%O-zUZl}9JqrJ z3snBU!mS~WHB2bK7+>@a>x+n_dm{NF$u{8mB^!L*N4*>0lU4U=ml-OMgr9^PLzjQp zA)y!!Cfl|UkvJfd{Yyssmu&Dkh_e4DvvS~$yev@lzYp6#2UwQI{+C(%Cz9@oWdD-U z{v{iH-AA>9{yReV&M?OUmA~?kQ02?fj8^%@*!^vL1n&Su(mj!MFBx?&+2HH`F5Ejj z<)Q2M*GK3+(GFVBQK0f)3M-#u1q0<5qx*GM_e9b?k#sK^buZcA>;5*}J3Lj8tNUjn zbng$`D^TtGhtiwq&hkOkO z!<9tu&DPHoN$*6`yJXb6WN$vbzZ9W&{~JJodcP@b?;L7Y61~6M+B=c-P9(icM!icG z*87g0rPW^7D1-$Me{^ciRWEf7*F+QyRAh_D!yt<_lklp*)pRNn@%c}WfrKGLwFq#_ z7IMY-N`%$eEgW*yjXmKJ#5@O2;2neCacO8dW9|hl^SUN>b~Z0#&{ZK3SNFi(n2xs~ zf_nPjeNB<5(daN&OM~@}*)PWQ|rQXFzKY(;GQoOl&OOP_Zmm;OQy6~U6L5V~Q zQOv}KOSalSF17ouC|Vd*R4gr@Le?5XJrpi2*F?}_;<5@M=2dikSYp%zT54(zfqp~{ zk*FckLR6AHhv%29q$P&IN5xXpgRF%E=3Hv-glTI_1QNL=#;z%ocbMWW2-Qk(!^Tmm zsoBL=B1EEwNYqG1Y9uQuHH=FtmYQpkwQzgZrRER&h!{M;+^&gjt>?G5%y+2?MR^rc ze#Qi!`OD?l4zm;yi6SBeU`w_Rk11J6DPjmyu@qg2tc61#U5dUGQF;<9vE*HR{^%B; za+IDAT55OLW=lnXN^aP8fHi{WN)wz`NQs)|HXO>+@SbIzAd#pdQrN6y44aj#q*O8Ds#vOS zMApKQoGw*cbEV3OVJn2Gkw-X13VA9=scNuP5s4}yQ6(9vlB}duF)*uGs-m3Vi4m`_ zX+qr!Vd|LoI82p;rrWIZBN9zSa(#)<37!6h|U46(}c%+$Is=gaZS8{A!AvAsK;PTV-JzJ`X zL=%xpm1Hbcl9iMu296a=(>2IiIOxTtX+QLYYD?c)G`GtM!7GHLo#k)w-3mRaBoT=s zB6Su?#?B(iN=gyq$%>`ubI98KEROHx$QEDX9V#5DR|sRj9asKR^*^>$5s5M)z4l7B z0eX?Fq?9rItXRsTT7IWQI=_^FzCxJ#A%gd8S9v*Fe)n6Nh(r^SoS$TLev*}xCPu0i zOH(hh7GA{6b$(nPKwEm}=f?aM!cQ}$W|;x zHz8};dL|BvpeSu65lJ5s4xql_tqpnj|YJMGTKCmZGTE-gS`_Ie~_Sa5Nr4g$_sM zC`F%#p48eS5=BI!NHS6+SxG5k6kV|t#gVn}h#0p{x+#*PL~GA1YLItN#C~-yN9CaC zXOoN3xRA!|=Uwm!7L5 z>G8ic6++MBaaq|E(FK|=q%j|QY&>Iu^pt{~akkng5<5gOGe^2)Twy`7 z!DQ!KU?)6bsmspY5oN}WX3U2b8_M_wvhse*3XxbLQkjvAWk#~WWF@L@c`c&MBmx=p z;lxHU7Q{&@%1Mo7gh-4Kscw;sb&F(!$p}L$=Vqzxe-Xh*bo^pIOxfVYH;k!2+xmt` zOc80lLdm#Zp=5)})DvJT{PEiLXlo;xaywxXVT<|jvtXS6CRq?arD+j7Zy6#ILqsu* z9q>HKxGu3|gUL`o7zzjNxD5S0lA%lyi}`S5!xanSs1)9AhV^ztVu(l#Nk)bw8%&0t z1ViDem0X7YH&=$jfr|MMWTO-dBB&&->JuzOL}G|Y3`s_YBpXbIqP$!~#M@`4_{4k& zvcZXk5mXX}Zna*HNDL8)A<4*)WP{1j4^W1}L%G~C#C1otrGFcB7;-}s^C9S((Zy9m zC1L1F%Mg(mA`(NAks-+jlcA@f{_yu{m!ZQW8Ojosm=90m#}vg=De9uT?e}XUu|%Y0 zMJ401qLK|JOWy-a;V3tkrSC+tlqMK4A9idcVqtEs6zn`^%Mg*+AyWT=WNg(*Hkj76Or&A&Pn1p&7|`_-JtZr`O=F;b}@;W_}vk zhD*E$r42pIhbS9&SP)SqsfT`L%Mg*6BGMbHWPD?lY%t4ER9o)kNDr4j;xHeAY`9@z z1eJuLuUdwP#1N5M3X-vdN@urO*$;pHB(UXDo2 z5Xs9)MlUDXU^3H>yJqW4I52{l%rS=fP-FuP3!*KBRKYa^KnM-=8mjSVL( zh?-KAnLF*5Y$7p3BxWQdGm;G^Gmqh})3bbSxFM36MBB{|B+Q4J{pyN(A1zJ)^-nE3 zL}G_X?>v(6okz04WakmE6P`cGZ4IT6DvXJU_PwaxWPA!l@?pa5Q!Bcu_75+k?hUH%9W9@{|B#es9S#b;Je zOYGg+*RZ{*uW{SdzL{GguH1y{dx(GQSzVKud-16nk24P*i+8J9k8=+S)mwBX&;+v= zad=sl!)?dj8vlpHL@lzzhY^mi<98c=hllDhp2K6##qX#+@t@hy2ksM%)o(kx#+wjD zUOIJi*S+n+Atq#ZcRwKUY6vbF>+w&XZT>ve{8=0PIZlh>vIQ~LxjOT;6~CeQ1(BIQ z8KR|d|A3VF-Ha4!@lM5mib^CBvqT!-E!ivnahjVED@gA!)Hd!|N$p(N?>%PHA98}s z_>#(jiXrQ(_b~fbZP30|uO;n!b(Pus;s$f#i?6xoy}IgL#+FtX&4*)4+i*YLi$88p z9pWK?Q^%5}OYu7_#1hZJ>jUO&^1SzCV#$ycTonh}J9u7Nk{Be)AXmdmdKP%!Fbi8e zubX*6TdbS;`8U#Pq_kSGKqMB3V%|!BZ zAGfc9AwDDIW-00WksgGyq6NmyI*M&F=s}>Rr>Y{oJ0_m5vvzfI2t*bGF21597Mq`7UeVV4&VHhYt#;YjMzRQjqRwi3Ilzl-$XGNOk(fu1lsP^~u~_pU|!Xf{sh znO#o8vGZ48|AY`HJm+2bosQoRp+9Y?g~-YDu1=K2jI;ztCwsZOag`)m?uEdm#q=h) zyf6=8UQPfH%vS?a=Itb(mln$lk$54}^na2)hvOy7+`_XQpmou+eEZHN732Fi505u) zXOp65)d8Du4NTOWTud;by>|_oleK0-w>>QBt3RMpaUYL@ALLm6L2M^dwmsDDA|}(XB{FBfSkNn?#>O$|lhrNKq2JC!jx3NhB(XwA7kp zoBZSaCQ&us3AeF#CG|}t=mEp4VWN4vX_pUf?OlS7G_6o_bi?+}U3;F}x%rGZI?n=W zyt21(ThH=sJG%~#&)mi?ww_hT^2QzxQNP;oNBghpU$S=`-EC%ft=S!~>7BW4^E2^= zZFt|TPI}+`AkLm^iaVdY&!BpsOAVR@gvC@~M~i@Zj2$flVw=9!yWZ}lb!2`+Wu=W1 zyx`^Wvv`f#4}bA*zM(#iUwB$)p2J4|=ka?Wvu)|UD02m1J_nliH!~1yK}M2am-f!o z{^rnPw!fF){Dr7|OoMz|YJ;4%w=lQ|Qa%HlEq>muI1L=2=QYVih;h%_nfb@N1!Kn>#XBW7alP-yiZZ%ZD?)MC59g<}H7)?UHYCvP&Y_B@xO3 ztWh#Xe@OOLw#$c&FC1*UTn)PnPu%U=<*xjoVK%=9DbZrKcA4o#C?D&5=I~JU9CTXb zXq|6_&*UqqY?DZ~NhF^s8GWW?Z#~;=GZxAE{EJy_^Flmxt;hPDy{M(D&sX7!;jvn- zZ9bW~J`cUkX(6GygD^P@n~eDw=KW(rh8eUQb2Lmm!y93n&w&%!CXsBDNVX{%ZBw$h zvTbH>YnID4`@w5?EUs&tKgiiO6GNc#HO=daG|e}{F4^BByCjlb5~)6yjPZ)LlD z`VH}!QSHpHM%iWB?vi{Q=0A$G$~VSeveQa-NhG@@l3hwhyOiv$Y?qJYscOA?_^)*D zKjre5kK=yfh+NlSemlEers?;|$0jp&{^VSVzY)HYJ#Vr}BH1L7;zT9mTaaY1$*E2( zPJCOup$7dq)%ZePIgKmV)}SXRKIycb>yFuGdUMc+mNWCvdS;Q`mzu`9u zzhIjLKsg+o*}_pbPeM95^i`VY49D+K{F>j1|ICJW3WSAR(z5jA_O6!B_U1NI8BUmh zu#Jh$bLW~47v3q@64?FV`Bbo!Ob~^0{Rp(#ygmI;kgIBNOI)q7wcW_@r)Oo&OA)ei z^oRreJNyur;_8qoU$mM3DZ3>{8l3GZdS^CLKG#Q)QYR)E&!6wQoZSkc=ys)AGU)t@=FZ+ZV?d;$|r_t&qVZKCLQ^z_#t zHg28aHGXR4REwuq#~ar54v9Cu+NCaBT<)yda}XvJ|IJ5XA;_TF)}hm?&c}%9X@J{1Ms^?2#Rieyu(5p)vU>aiW19_49}M&3v9IGd6nQ!^ zWNbX=VEmYN)#5+1!Pxv!&Bn@%$t`G}*OF{*_5RUJTyq=h?e0}0mv+nk=Lm1ah#k<< z-!Vb=-a*In2oobl>#T)+*5VL86>YKBS}3J~h5Az1=zAcg(uW;nE|;uwYp_#n=Jf0g z&2hisGbDz30Snz9LE4Lyorc#Sore^&{B|!#dM#4s>^v|f2Sg-8CW?9YVlO$XV&IcO zG4DG-WVFhA%ts30AoEq;bC40myvblp*PG%azq31Sh$!OMcEzb4Le?6#yMJtR|Hv&k zw8DEIuJjn(&oB?X_=wI?KEmeK0JC{Um`+-VA(h$R>FXk2#CK zWCz&R*1EX0quud+?X8PDFrDS1)_K!9u($pE6FXbyb>W!Ft({oj8^E|m<{@=+UE}lk zK4HFkSQ{DZoWMNY5OQh=4l#jkOOP_JmmsArd;|_mwm>9XAksAOlCAfTGki`>#D%i< z`RzGRQ$6A0y%%JG8Ua({3>QImOh}bH2Y2>hP2N3w;y<&Yc+UvRg(=dLnisb!^31(K zaCmZ`{hhd$)f4Oby2NoF@7IqXtQ7@STc@v<+0c#DLL{{i#k_}bpk$BuNNREF=#{)8 zLdM=3-?nfZGD$wXoxGh1R8lp)HdIenn!H_u=N@Ka`^MpJ!%S4143=L5GMny+*h_U( z;>RsqcRvMLcmxQ~L8(W)Gv-tZ6u@Pg!;?fv?MvF)TDoSmpk7$mGQZO|RhNPUc1?9R zG(QXld!gQD_F#$LqR!Tf=CqnvB}RPWQN7=xNm?slWLQBk>!G zUvTu;3f13GeK((NJW}4_aqISo#3@nC`=h_N%KNjA)Ssf`*q@@~LTxdZ=QELmHv!Mj zBLCs`xXbg(Y&R1-c1s8ib|l z(&B{m!ep!af4Zmajviz9kmq`2)>6^P`n{a)}cKE2uID5&+uUnN>^CLOG zieIscE}kdDTf1*k^3a##F0~$>EsHlk414JfEAiv@Pm~MRY?Qr@A8!y|k)7x87<#eq zW@9c~N&^+|>+M;?8>DWoJB})%Y1yOi4YS4khCS~YD1Cf}CZv3hseWm^-m*m`wulst zCfPO|FIkq7cQPI@r;=AwlG+s2j@iPs=>VkRmlL<-{Wu$crsSQlu(fS|9`C}o&;LGrb{Awl}1=;ko!W z95OXNo!uqRvAg8C_@rukK>XBd=d~Iy&lz5;Yjb|B=D;StSJ!y)op>m-xo_5@jkI{< zvGYhgPp!xIwVxPtfkkMe`)}Hh0Cj@dVdfo7Z`$i1TWn;n0CgF}^8Yvd0!{%GUx;+xF%)BBC zKy6YH*u#JEc3;GULXi9-9u$Mbi}<^eUc?=SSaD7EpJb?U<42EZ@&6u5)iLDRs9a{TI^9kp3I#El77F{U%bpmzbtZE387VB19@s zL@^FZGQ3xL5BezPJq|>xsPdlhQOx@x5Ur=md%;IBZx&eB^=A7h<}I+Y3#_c$%C5As zEDpK}R+ZjCkM9q?@Kktp$W7)Kp5w4rC4!b3w(2R6QO+N?u#5fzWG97QFnJCXhv81R zavG~{Y{5vHh0Tl9bz}_M{F!6JXeZ3Wyy*nPoM@tY$w}Az(Fc*Ea7?flI%x5ig_EXY@?NBVe@R{U=?X&q&pUo#Nn?z!hNNh?*HYFpQl95fxvamTM<16YQm(4FBx8WMc zEt}uW#-?rl=3PF2UXJpKo`-G_p51)Pc`+NwiMJlx zo10^`n&gP_7^dZyPqoTChO5;%z9WXd4aswn*5kN&z9a6pBom2bB9SZ^NtTQxOGc6< z%R+K(#$x-%lYB28AlxNY$8SqN z&8B=)!rU*RjNeTuW4MaHxxGTRj3r)Y#s>9C3_CXOBPZdUNH(*-qkoaJe1c}-XqzRXDzot1zOw9U4h5J0;#~`ky3&6 zzC~VZ6-Xon5@|_4$=2d{$uf18qz@?w`bzp5)-_$=p{s=c$}`;~r}{JRoPchU41od_ z89Fq&I=Y(M7$h(b7gKjeJ00kJAO#Mb4b(b5_#iJZ&9wo7*PgLD-jC zkJExJxNQ+#7^~1(;71JXmDJf_wHNfV)(3Y*%DgWfmONJpI}-R@>_|Xgj_F94jFcS- z(~r>% z;cOVlw(8fz|L>)tGq+)k8b+wC+8!IvnWoUs$DMr@KN4Q`|Avik+!mZsm2^gpe+Ev< z@VT052>QnWQ>KNw8M327=EZZ~jUScy(w_LwZ1{X?CrQDVG-6{-?$v{1X-z{s#;P%- z#LkjZ3&B4j_%SXz>x`2p&pCPeoTE?&RE-D*m2vE`aWsFyrKThOe_XnVfclC|S`Hdv zIN5CB>TeOG;h+GXLodnl`)pXt!L%o?q7y|GXV}eEw4L`PC~$67$NN!(ZdLbQXoh)! z_PUu54A3*0nrk&hBux=1NIWVMbZ) znFa$>e$hXH;U)}5(TEA-?Sk06JemoQ@9p<+sg_ImPQd#=gg#GKc^}?I${UT8`5J>1 zI`V3fQJEQ$lt-j_dn8-!AD70=5E++Ab5UmYNnAC&4ytQrmylz#C1N4cbabzvxA|swdti3fug|r9ok*IKjGB`y#q5gE+!eTL zc3CK!Fj>Q|2LT zeM|l3=`y6u+hu<9^cHJp81vCuff{L>erDnTi-xRuh(L=Mg?#Fs}AK z6Dqs&nlEWdd<<#CoO`W`PIM{4HT})4V9!T|Y1PFhO1OgEj%&D{Zk(^J@xHbW^R@K} zs8DqTk+ek=^B%!fC0psEGDe zf$D2f(Pis;9fiGaxe8Ytpx8SuRCsv~E^R7~#jZI{Uxb+z3oW}BBBQqKrZiJ{&xN4| z-toQ}PD09x;soCe=OS||yhPF_kqWP5EWDB>Ym;(gg3!MAIcRa1QBSy6faGOU+a=gP zF{C!0L$y(3FK07G(?~wO`JyuRpn1JF5i$vb>GgWI@?sqLw!l5Sl`CoYJ;?e%kj~EIi7%&bROfE?|ax7Ut zj+ZQp`dSNC-^IB6v02o2akc`Rht`sdtJGG9dj}iU#sZ5sS~wwXNBITxJX=7Cq$VO2 zP{~*jB}-OQyurpxZsJvw+}=}_rekC(R9@@RWn}*5bTIa^1Xtq6E$sN%K@slP<2lHt z8T4^s@K8?NdP=|E=^gW1CUq?FXWDcf2Cm|7Zu@0b(A;BB40G0nUpp?MuTK2f$hO?; z2f}%o%j&h{FOaz=%Y3r$&aHY*^xuY0LdwpVDgN6q`%2|3iNpnwJ~>FX1;euA04Gq^-g|1b_xn`*Bzy}IYA8q7u&i%+TGAhao!y{DK9 zO{xyYoK>1{k*699nTqUAGUys0$!@bU(iQgmt0AMN$ql#tVbbp4F?MH#TW>svj69Ct z$6Tv%&1FVsi-LcWO~z$4VLpsz3&w*jfXVp1yL%@Es3pv1Pd_}3W>cGFIHsD#BiN03 zrRDHmqkSpgD42hAJ9g8%JdBjj@-3t!oTW_`L?jC$()@suZS{{!X)9-JyfhhJifg=l z0(T9U;ZcyW470(|>ayW~e{o4sMU3Ki0t#DKj$H<}45u%fynncC9^seGBat#+NBL!Q zw$&_=G)tuZ7Rkt%WMMzKBc8D>P3KICgDvd*(!GT694e0W$JwspT#Y4}aXwn38E0<& z@!nyj-2wAse(prdJl*A+BMnF9NF=2ZsScK`AID2ZrDYgEH5?jRhyzmxP=%wGp02}D zg~k(}h;v;oo;rkq4Tj^gsm?v`NHVXdV5OMSmq|EC-k7MSN1ozOeFV|q`adtU*WEjk9+b`_-NA2{Gv)S z8g9e`NW(SjJ1m&~P==c?oPyw9x&QeVfIkCCuZ*NiXnmE4Y$ z`RnkN{2($cB@;=>L<(q-Y%PwLETm*Ok%H^bMYw4Ad!k!^uGvOkMJ-A= zB`xiQqL%9*|3bXMzr`y6nB#wz<-al}(WdHV2%;Qorl8y9HO4A)n z{b(#txW){8dhn7I_UU+`NC`Fzd^$4ZUFWjHFYWX3!H!+E$un$#pNpF3x1=4*hO79S z%f_q0=K;>-!ra{r-MgdIVDbqWMyVy5@CO9fL(064#i2ux?(55^L(9zjEMME#;t!Q5 zB59jQFGZ4V#qpA5DN*l$VWlrogW3wc33&|%2nHqUNbGxtN-NS1Uh(P3zDvP3|YrbJXCWuA9KO2!|-PH{yfu81_INwO#W zdL@!xiB$bcwid@rmZHNrdX6$gO)&@A zG?=ad!*i%XD)0O>8gyS{b2C_6$lqKAu1b27O>Mw1AK`b|VSWd|JCHJKm3{}nnO1{D z(jbvEC>b>>aVQG4-Ulrj2b8%9IRSfJ2EuQx zi+P<;6O!j3^Jb=;MM*wB^xbG$^ZeE&sSU=&{ak$~cSQdM*RR7b*m%!yH}oOCkLLF= zm3ty-mq^{vlC8w~l7;QFa@B^4p=cy#TuTs@jZsmM?Qk`SR|8CLbTVYPeRSl6;LnPHmM%74`Ml~;P$YL~nk<8|p(isiUp(CJ^ zI4F~5W|u}YyjR$04)--vZ#6?C%@9d5l2J2~K{GvD_MPP~-@UQ7VN-9z7Iz)*yK$&D z{+V8`=)K)v$hq&dT{le)#&Gma-fL4+Fm9u7#_pRizY0GLZ#V5*Gn?s!Tr9e}Z*r{3 z9vC+V`UkD7!98HBn9sIv#x70M%x(BL?-N|pR&LNk081jKY8d z&4zFPt@BzIn{~)nz>N(vYxZ1<>afjziSEcZEUeTpYeo!mJYC!EZP$`8)Ul*ndH&ZOd~G#yL#Cnx+8~ z3dTdf@a69*?em1^|l4hf<+XAv8oXw5;zmgYRwT{wIh0Kd|wl9ti=GYc*T(3UHEoaWBhWs zl79}Fp@!)qxUrJQrweoJ>qtKWEzAv-0G`8Rp2F|TMV5fTqBvlX`AFT|m*lht%(;sF zNxXLVJEQyY6s==XNVKxK`SVcoC$nq*9Ea&khr$fBosNW`WUw)2iK~&lABAr*uWP*4 z5cnMTgi~?krRI2Z0tc2Y!3nKNC#cTae=Q!@CvfLr6c1l>FR|l=q>ZRS6PRjuRP4mMM;^&CE1*%VP{44kqNj8`xHdeT^$j-GQma8dfxM zX72dR?W}dS$D3+wtuu9?VFM~8Q^~!!0d?n!sirPN=|SDOqA92%QFpGGhS)1}$&{*U zj#F2mAaG`}N@pPM3Q!mLE$fKKAg`*VJ_2+s6jkee6iC&}4M2Ao*&RU3U`4~cF9NAT zdH_fjQa{jTX75^{%MF5&q_ngLAfq8v;>T^_Sazu-W*9pd3SSs1ggobH{Fr{F$U?~3 zWKEy;91cQeQDkm{Ey$JU)m=3d22)@q#7HleE0$qD(u+$`H<3<6`XJId zNWX>j7Np-sT8(rWxK`mIQsE&|FFJXxGF?tYG4D4xgREDXY3+$(#s$z$s=UARdPc?> z#B@E*Ag1drva&8KOKyTQDx|)?(0&10X}Cc{t?Ypxjp%OvXSOuoKh!6mwLz1xqx8S(r0cTm{c)vc72N5%iKV}0j6cP zbj|bkV~;!^{TI)4|eKuS+| znJr&LDqln~<6p^XmG>(gN2JheGG66vfs82T{T~pmrHa!p7!>n9h8*g8=lRHdrSI7? z*0dwi24pWCyUXyaUd1JBGx;#n>^=a^?k8wE7yg~Qg0DqE%Xy%p5=G{f>Tv_-Y#nIW ziWd36Ia@a2aL*pmuw`K1N^^--zjH4Uw6q5*Fv%${F?QgbO#=;^%q2D^E`jnq(6BMM z#EZXkGGVUp;;)?xY(NXgT;P?&1zvn@py3sq{|COua5{$uyi`m&4A&Vt@c>NL@B|A& z^3z%G(#X{xDh~bY@UxN0#%eAOvEE!cI0CyH)>(>#XJxNj*@3VjoqH;f&SkwS*-ci4C4PO`&#i15ki1no&-8EXWzAHHAGd3cqNhr< z(?(%`ILeRb&~W%I3!9rijmvQv=D645Ii zV2V?3gI$vRn1=1c`{=5%+uyfsO@l#w4W^@xbE})b*EDRz19*KiH=@JPEMMNUN(+&% zY1qm=n|H(HFFmVv!Nf4}nOl#UxqUe%U*5_N3Z3tPnVp+|nepg%`A6H!>V)+fPT015 zjy>U6bBFkIO5k7Zv-W5W_AT+oE%r(9L4W2}Ewru&i0{!0|Gb4FT>+EWRBpZj{=w~I ztT5l+wP5uTcwQ~oc9KQSK$jbzak)iz11&Q$wpWC>M$(nL(^|^l?bKlcGJ8`|Og)Rbm< z;pAnn&+qKGbVl>sHuSKDTPr~(lKsOspgHp;ioJf7xEEIzo->ClRyDWb4NbiuUD(my za_I@pi<;-Pb}dWl1EIB^pj`5^{8kth4{yb)Oo^#><}K-D{=1m9>6k1k=?drI@a?(+ zJ;oOQ3JY<T&pGQ;pV-Rv%b z1$9qGT7h&XQglXllfT`N(#w1S)+H}PBrii00WgoY)|9G3h^EO{BiMMG3=W5e%wmG$Fbmek- zoAI!i*;(2&PwbV^+hksrK5tiZ&zO*_;T$4w=4OrQ8-A;KnrC5QYS$3S(-6f>IF4j! z6M2$N@==v{qLr~VqvPmvbliVD&ER<&Eq7gPyC$8d(Ur^TX-30hrf2aq-^%W3LW^eS z?P3nW<&)l=-s~>sFL1nXH4pQB>tTrGVTfYh|HIQr#&;;m*efF$-=QRHvogLzNd^z& z%r!o);PJel!kxq8h-x9@H!1X{dDk*d(`;y2XBhj1x7;GeekHzg*73&FOBW3p_K9+SeuOCB7 z1zn8)q--K7n@B;-lJ)z?4XUy~j+=((mvfc<&j@8NXzOUsQ{AuPHPgmC(-)Om*`vXX zluaaM6G_>UQQ49u`v914`7C?6dD!H!F|M*d7oluZQyr9_ao++TV6~0=mqX$Iw$@D~ zg%fFDgJi35Z^;Hx;aB6P;W3A*%zt%VLG8$`u_0yhoMQRFIqMTDg8LdGRrke*JN8`;We>N?CX%v==YRL?VGm!ETbRhdv}5L=vvSO=o5y;rU1s5V~gK>^ZOvAJpZfT^rYs(kuiH81J+AJ{(w@HsE=Dg;o$#pxAM6`B7A2##QdNXJ(Z~Oj1>vo8wbRxMO$>??@8$_jFi<@S9vppcf;wR0R zGj-;~(`TGKyJ7O2NwcQRIsJ^u4f%E1cYoN?emUGtgKgmuN%=&wc*$t-k`1Erqb&ZL z5f-oDXf0!zpU$`9%H_5Ak6Vi;lG2G}@siQvB^yMgN40K-L|FXXu9MqQ!M4ojR2TVa zeLTjvTdkMF((kaJ0*Rz_A}L)mDqXTcRQgr8X?QYf*SGH$sq{qaWpTmvSh)-zuC)3MbN+ zDarU{O0qYR!tcvT;Rp%MPvOV9O_*{he7^PPL{d1B6fPMRF4>z%;eU%%xZgLQpTZw6 zcUZ^1*20OTa3U#OGAdj$D7m=l1U9*kn7>k88kllH8F=gKP1IUS2!e;=e!@s?t}DkxAP#U0d=kI zi!spE45s6agRLR}o;%pq4yNNO^UNa$({YvgV6C$~4#OB*Go&q;jH?SraiE(yBv_ap z(+y#OF9+XoZU!FW4!+~Xf>CywUxP;mqvkr==G$R-XnOX=Rze%a-{&Y?;?_Ec0KmWxm~`!Z zNAqD?;6B9 z{yPS-j@NPjpS^1VucA2H8xk>wsGw0%QKLphMecV{0}@3A1O-KlLV$45kkDKdFW4w( ziSe$rwAB`^wYJ`{#aq1;geqE8w5U)oMWq!56%{S5DF6F@-|n2*opW;bkWlb>{&}*Q z_k271&FnYtTy}P5mgW5kk+F?Wly^PL^8S>ZWgDL;?|ODymiJcRLG%r*UEXsVFYnHq zkPKROv%D)+K|dM=|9@T3zfa}-X)s31IgyrgqCAh=r>JbWkDU1w{>CrCZd}+TY9~++ z8%|-bsbE(a*+2?=<=H2(-IYGQ%ayObXP@JR!A4+mEjHq_&-2>ge6R<316fstJb^s-#b*?%WUll%)K;}C?({$yk? z0HuC_eidgE&#vwwtZ6vkJJPAw*dnOa>W%&!PJSRHD&UYY-Z5aw2>_K+cAL z1pK?`ZBawb2L1haNUS-y(-K?3p1()xR{|C<8<@u7$;H$T8 zX8`!#HS)onq+de~yC>&jTZN<~0m+6pn+C=jveRfmM~I6Q^U8 zploC|sLEkSsdSv1xS$He$13&JL5ebpbT3S@wd3JSc# zAWLoRV{n$n4jeg-%S1+w&%kj)gyX!1VYq1W0Q&(w`f;PF)p2bd>~t6Uwh`+T+sKTU zA2zc2JrqV|T86=AdQO8+e)oe=`AwuoCem*?tL!O1T!`N^a>?dviU)7)zPuMg>wt*G zIO>SVksJ8Vifys*C*G!3o8M`;8Q5#>fuU+RYB9#U6t%Ezv5!!jGA$p&XL{E8wd>;$ zs>O)ZVnk{&mC<4<3)6Bwx1~>7hcbr7_=Wn(i|(_?YnVb-81wi;9O}?yb5Q&C#mm&> zpJkX@&CfCLTuf^|4f0!!TGX0M3N30|^AhYq$h2MxpXt2}KKWN`+A1QoCXs$kS!Hkg z;go;YH{U_PSu={T^C~(s4I_$XJ&W%MY_1<(w62UF_kgGny9I8ZwQvyM4$N9qj2+iE z&w94M3VW-ty9zt2u!9QQQ;08+Q%UQFlXDve=9`a^L-zatjOk+LUbs@JgGeh7K4GM; zO76f}JFB1V#EkaqxL=Jp3czPk@hJkvAFsZ1_{*^S;i9PfAqdA}wG< zN(mx;t*)|VemLFaT4igDjD^mk$>Yqds}|NA(6DhzZ`|w@{7m!zHo9_@*U(x$a4c&qhx_(rCY~^5YWYN&-yipDi!naOYBwTGPqYyC!e>{R zMi{Y<>FfiaIrb!knqx$oV?=o#-;1b>opzNiH?kE*h8&x`<&isT* zVQ_bH<1*smM~#UKY7$W*gB2R{hIRV}TC9sC;tj!x#5E-wf_Q_$k&w{?p>6kE*!{Q* z4?_IGS<8r;hV|X&mPogif;`?q>$!vj)EGMHB8rgLXn6Ts0qT&~ZSGw1+s$x{Wmr-3xdm zKg`Ff1e5U(G_^iMC znfjYZ>u)0efmmcu`Qe-g61%5)7%Vsi0o|Tv*M*TMheCu(-Pb%0XH(}F-+Baj1?WZl znsXtG&JyA^xDgozdcn@G=!0Y5z7=I<6RS@z!}DR;g=Hh*mrg00SXEikEWOSzkcQqk z0>^Z<#lidO;0ufVJ}1m6ea^$-bCl=^_{^`zaU=fYxa7?kU#6o(Jlo1!Vq`0Q)XIC? z$ik24TfadX>z3%M3L2L^7C!Pm+L)!arx@Sb(C0h5^q4+lP+IIBJ)@^}L3Xdmzxb4F z?Y*1|pJ^NdpH{uzSd~ai0gp`@rZkK|kjpa?W6!=?e zG)oacy5f|A1N>3|b4n>V$S(zjekpj&lgHOEeDvG0Zdd-i94})wp$&twO&CbTH~m;seuX0_&w%m* zgpF&^!1C#8AN*!mKG8miBRcv}0~y0q;8?l`{)zMFmFQZdzI~@-zbg5r0a}BK$tP4! zn_gO_?RpSZaH0Bkw%iG&@-!Q?>&2*Us;efTc5Ky#H4cAItgeyYyk(}Ss;oxZea%Iw zM*J9fmh(FE;Iqc3>+X4Vya$X-$dfHvi8}TMd&55sKAvjpM!|=y?mYPY;ZKBrEc^@L z<29ws_bi6b6iviGZCQvk_lfk$S7jUhaQ>5A>tHVS28>W(sG^=9Lgv>`u2{4HA=l#Y zf)NZneQcWb5k6S5Y1YgQUQH)_qlwd@t&j}}%W;l|HXP2}*f4OA8H8N-6oNiCpmP>_ z60IZSANPQv1s?DCw}Q?G(*DEc1|{Ro)i{exFs?TYxxbefmt2f9(f3KbW`7(P;aF0D zf8vr1L6bezHKV4RSEqJNOpQ95GFv+Ml;M{)0!mB`eN2OIItJ*K9O>tj;?|IXmn2S0 zkf~3bGGFy)NBiGNWQ{P|7t-TBuw5jHhv1<58Z`j#>)-H^3~v*BM)Y6!y!IRTEGwJg zPlx{-i!RL-?us^X1{zxh^paXtz|Rat2{#sx8v01FG{(^C9|O%N*-S@2M?J1|FeeP1BU6hMUAdBvmVq5V?{2?w;Av-0wsuEwQuO3id9+1`T)&^R_ zGh571X<)(&@os1WSUtXU!UY&A)n@%_)bpjK{0Af4rp^evCw?Zxut#_~jJd7?ZoANE!mmpG{mmY=o0 zwLiQa?G>5+kUs$2r({#D8KmZ$SP5VN8oY+VIr3&U|GNA+BhJr}^Rt%Z>hd+OW)FV- z9ldCLBp#@K)CNvp+CV$%wdh;p^7>P9LcJzbVyIQUoLyNxawIWV5Z@rF3_U|{Ggwz3 zZ&G%VvtuC}D>AgRbYL$JD zDAh}-LQ3@$L`tcQlE2>ffyq zZn34^R@CYX%PO^qlv+f2@_k;FZ9x1g`yNs2aG?yTb(A1dOJ$_ifg&TdjuzBh)cQ3v zM&HcZ)cQ6}ZI#&bI#WuSjjsbr{kO5|YFkq3NLW-UMWmD>(%MR8tgTe`J)+cJLKRYK zUqPgl%1EhQMMg^PC#bn7btg0qiM&vT6&b1a zhM?x6+C$J7-7wa!y>3oRwcxqi-l08Hf=%k`j|v3@tA!wCUA8S7#}%-y(u+vxMWln~ zD%%K~sqA}1ud}7mBfZWQM0%-=^co>D((61y%|)+=p>a$jHQ8fn>6LsB`b-ICHlhy* zHmR`=y}qy6R*mHtSXe1Wq!c5{^GGa}ZSqm@Ugmo-05MpoLy8R%M2e}56e|`PDK=D4 zb5U$QG)AYJ+cnt3aVZwwX+KkjneFxihPB7-r>erXWes*JtgG}QQhE_-4W=>@O=aJs z8tmuN@R44+cLC|8GScg2IZJxY6VzPvO4mT%v=^cjhe7HjgAvwt_WA)l+1WT#c9{Yl zHfmGswzL#;zIc&o>u5fE5!7E_ZzpO!3(G3Ch?H7HI$EzXj@GN}dql0d=s+s9ZWlyq zsf^URQDmgn9fF#RTEBzF=wua}T3LKqCoWav82+Y5ro1vA_6T^zEg@4?SxCpWthKm< zr&5bZsYRsJQW>eGvhNYK-beXRYW+(PsiiVf>+d2XwLTQoT-16T8YeU|FfljnQ)6P> zD?B-Bs~Si1`I3NX8@r}v+P0+GKVfC18IjVAD9>Y)s4@<;s_c72v-^cU?0@NQm!z4> zNVB`;ENS)!LCr<8hoG^s;ng3fr`g5R%O+w6nQAOu+1gh{<^wGOySUM1%6e>D(u;eO zD!qu5UPRixR~ftaD*GPMOE+mFz5XOkAnBzt((3_{kzP*Vaip5rm5f}xhMg|X8JnMmT#*mGWJ)gcwU>Zg+@CuxxtPwanca0guH)=3 z-d`}gi#w((xrmfpL`p7|kz6WMa+wwJ%`#727S|nHt1U2Zun^bI!@Sf24-?zHy9M<&vH?JIMRp3%Zv>SB-6H62 zpw#So5NB<6y@jrGJ8K9D~!cEBr;9)byf#)Y;Pq&1Y=_dhLTbl&R>2 z%cIp7)0&K7Oh4xj9s!^82XWi7^ZGFOoIiLSd@_vp7%=SDy9Ep*Qic&}-(F?x+pFw* zSACt2!lFI=Nt>-T91#%~VjH%(HL3krQ_ zlgoVABp?@en9P7&OlLB3rJJ03J+6yZU)&&8t1luY7m-$9Dr5DfGLUOTV(lLn>22NI z{->bv#K`ki0c2pc9GCNlxYTp|t4c2(S%xKb@s>oGspXuy&oa+hHw+v>D_bbVrc@8&W3fO*O3%c6)tf@ixu_sj4R@8)6>YW2|k*YGw`EVaxYtz!7VJ=O?6e~KWou$}bjD5$HShx1w8C1h&=2nh&()6&@dw-504QUdDuzNY@n^@;gh)f zlty^CB@GWJl~~P&1N;x}b(U{1&CGfcug9GV*YX$jHMixuR)2WE&d&4BqvS1@++_ zX?SRs)?`*CnuRr)SBW>EnM_oP+k=O@!0yUJBIO}bp7$m!r?R(vq&!p^d8pxbJRbHF zE|G`b1d)fj3Wq%GEHd&?W#nO3k&%bp1vQO_e}SIpYZ#k{>-I$eamio9xa)B;Bcxf4 zlQ|)8MiEI65^3BXoa~Q0P)-slCy8`*t;*IQZ7SocPnB^!qRMtWPU@l^a`F&i7&&>k zAae2`LFA;$$jO66Mou0osA-&h8hWCuE^JP+U#BiPCld>KGUK9I#*;Z0=VMX$cIV>J zu)T7TNV!O)o9d|SZ5U2vtQA$pRmm#b@wm9J@QGY(BZyqobwA|dZXzQWRYoqh78$v? zhoGi$@k!`utiQM>P5l_W*2#>CX8lj*Oyradi;3H#PUIRa}^dAMF=s9dd4^M-11Hu9;RD1 zlo>zGqM^+Bd18<4&QC7rQhpLCKZ)|ZPhn-1vD~Pv0JWpa+WN?!xW7Y<@94Us4oLMf z+=)KVEEhz6z95MFR2ljCSCNsQF9~WIKVN{J(T(u)m9+d!%(<9UIka@TOtr|2m6N(| z^;7nxg&|gMpS~nleVP}=G2dOgdXrZzluin%JNga^tQPLW-{XSa| zd3m}Z@=|5w~EoZk0(Q>;ydvmRs@{&k-NtEaP6V_GP zM?O+ss*JqUa629^b@>x{c^hheZO3&X6nS}z$jD2Tk(WOa8F~3rK~3Xjx_11ey%CYP zy8mqcYoOS2#hvQ(h7&FNw4rR~g%Jm9ZUH8F{I)9gml~ZmI)P zeHHFRd8sR?$jd85Mqa9nyqqmE^73jyP2=TK=!vdGuG)AF`-bz7Np@{+>s&q=PMQ%({oCyDaB_h4C-v6rbb zzSmJ1>r0jGc$~Z)ePgXJZxzJ)QWtuWlQ)TsoKzV(d5g%%$)5;n8YdS+PjpXMo0El@ zC7~`=-!i=9D>Fix1z(vHa^T@1LT-=tn~U$1k3`BxqCD?im`r8w`$+ehRT-J7;dVSe z>YA_)NcFoYSz1Tx>M-*0Es>FrDkC4?5gGaT4?#`i<7?0p{cfqv$2ayx0CB1Km>9E6 zvQ8{BdYV;YnbUK1*AP9o%QFvG@F_oul%GU--Y2l2$~X^DWo)@s#xZr3?Rfmu#bh0j z>U(h~%1>QZMt=TAWaOvH$j{%3jQsqapr-LN-Lv>}>G_#tfmvp>G|S5}r{$8v!nE8j zyyTKUk(VkXFXxMl zy!?Zprt$Jw=o!(-bI+tSeapzow9E);)}>`m$OrZa6LNdB<6I-Cd?Zpn66JaCz^W>H z&qvyhtBmcqhTHM@s0-IRAk~)(yU0gf!bUz`Dl+m>W#r>bk&%x-60~jkI6e&@Ba7KG zS$6ttye7r+Y)A*R~IcKM|d<-vt%Z!j_@muDE?1E)-iDAm^!bdJdR6Y_Z zABpriM`e7@Q5pHDGV)PnJ02h35l)ehD+IBATq%frd{xjeBO@RGCNlEzbwN$z;}YnJ zt|Y%6vfv$ftF(MfJm*ZR%y=2jL4{jAEn~w$HX*l1d;Ko#uY4p@J`&}5|9}Nm#u0Rt zk&h}PA62&F@$s)nzxE%W6+}KhCy0Ffv!G!{Mm{bQ8Tq(aP}BJMXXuG;)PFr>0UuvV z`!0v8H&5P*6=8pc=B-?Z^IW*G-X2_B2HPtaiIj^(c^+p|s*IySD&zcKm64Sy+wr)l ztA<%OPLiG=xv1-h$;AmG8)jtWVwuRu#mR!UEf>#8TQ??F5@*&zGN*w9wtdzw*Zl08=89TGqa?vweCCDD?*BOjrT}{%7C~wxPafP z^gj}|3@G)A+Ba~PtK)NV(0zl-x)6R24vy%yf)!7Sj0W+VLLATG_>jx%#U&p_H!HiR zUZNlDWn`{Py0AOg4uA{0E6Ogari$Q0bCrm9($wxRHHdO3SLORoI|u zef_9VY2kJWx%GpSmKI%!&OBDc(!v$Y%~x7>g%zV;wzW&kv-=`Samh=Iwf;PQc`?h+ z8!In$sK{fNmjjT*E}G7!mKU9KQm4w~|Mn~~J&@a4Vu-ZF5aoGWkT#WNBM(*9-bbyx z4o1duqTxmwSu>ZIA7$LW3~d;-VbS~8o@{gW@ch%yZ!JxS>@=nAOA#BFQR^GB>RU7n z$f+Ng(=dQLi8P#?Uw;Zugv!uevgJssGNdCLEJKP|hWI3Gmm#*ssaqT-uCW#eTQE8E z2zX5)4(^9>dfI-HJDw50Fdc+wq_5OiVfq*Y7qJUd?8avjZjRMI97|o2#z)5N>Li5z zqg}RT>+=%yv-NoeK3gB!KWKg4Hf4!O%My{!FH{-dxT&m*k6L*>jBK=#jWM!jE=${_ zua@7C%R-ZvSzk@ZU|4b#vE=Z%-7Y!HAWL0xSaUX3a@xR((GR-XtxvnOB_}lU62H)x zftSV#&7*s4i$asW$F^g&Krfn7L!_mKD9>ZNqq3cSlqc!nP=n3`nt*zoS=MrpL zePP)Q48WIFRg{*?dWyb%u`}D$((-`HjLUWQL;SPo_DDZ!FMoHoY@}r(9@YoePMTC! zg~xN<*6(PvNk(@SimrYD{7qb5J*9MdnLOW{C-2c#q)h+dUG%<(_;T!^T*rI57d{_i zeh2>;`1ip-9{&CCN5Fpo{<-iUg3tS(47d!j>s#o;BjS znRB1u>{c0K`trWB>oI2IQ)Ux}epU?}x$10;?0`X=R}C1wYIH$Bi!rOtX$#Uwm~pGl zZWn}^vTAgput>i%&vB)J?a8+p?Y){KW&glgi~MsN!9WZh@!!C26|);qLl2RM6YoeKxG*Jzuhs)!%RGuuVE=MNgTSip>=(mbuUK~ zK4rk^1J0g8ZP0GrMr(5$qNT0e5t3Rzpa`azbxBde2>v-3p(MYdwPS>NG{QWIfo7hE zaWpYwjxob(V}_#oQE$@>ZzCnEQaks z8Y&@t&{lcpI8;0K7Z|DLHO^>=)&FLp{sed2$*JrJJ!MBA;zh#S2 z^G{EdkwgiTR*Bn7PYJb4>{aRL@)bZcP&pQOykl*HFmmamBGiU@wy!}a0o6*YH5N#( zI3Gy$U2VeMVa|SH(9tadeFF>{2Bi8X0ja(p0_h0EbwI161-;vx-DptP?BMJv28}o9 z5`%6u=nkM6lKMx0G`596`qcI|(DM@8m*(sV$ZQRF1(2Sd12kEzcDs@N4oL4~5s+T- z9MGi_+iOM!z^82);fE*gZ3w3T<@^$2gu{d=TlU}T)0*R(_U7vcZLZsF|#5^Tm1 zZQU79;DY!t{!-V%9~ zFOhA4*W=Rs0`!Qc)K*;J@x|&|4$$N7rj<>@cF*!2AQ(2OsGU|)UN$ZC9$*?&WB7uO zBP?rpHL$)1;C8Ulv^))7!Z9tY{lI=&Ryt`};ilzn|C&^3`Bv34EzA9&$HObQQ2=wNFKyXaUQ-09oY54;}?FpO1(Jqhsf&H}1 z$IozD?q`5-9xd>%NtTu>=siQ#GcEV}K@(}&&Fji5q>B5H^Jw)-OcbPz`qTC z4g81-w6K>_@wwR;TOV!^WgV{e<%Fj@b7|uKK$Rn zzZCvG@SldyUi^#j*?WH#{_o-c9X@;U-@v~gKIw|uqV5Rz?8P4sANN{!7W{|dSHcHV z>#lwsFhc0 zWY-wk^+xuQk+Id(Yxjm#G>-jzl;_nN*~Lb7myz9LWLdC;Ub~Zz^1MTg>~JGvORC{| z8reW2JJHBaH?lL0j4iHSJITnZjO;=qyVA(6HnN+I>^392%gF9AvOgHvqek|ukv(T* zuNm1JMz-F_HW-Q(KoS@+I)+=f5L11FpY{Zz=3l-L*etDir};0a2P}j4v`idqC9Vzf3}sk+(-KD zPYt)p$dGyV#}M#Vcus4SmRXCk@T^^b4Kc=Lb{dXSfcM2R@nS?y{qUTI5xMol<;56w z+)tTzryw5Q4-Yy{nn1ah-^{xP94AEbj@K{@@3X`nKs2jfnR_(@Dkj&KmsXuvI-#br zO7bs=1lL*4?v2ep%+J4It{I02ODiTriMBS;JYibKVd#Xak#uor66=^gR4;Xh!v7dP z)4C2mOz(Y%lbR<)nkPh>Cn{r}s4T@mTGFzUJ+lMyU@flY%IdfLEE0UkHmf#_A z)1voVat!VE*6f9^`%8EPEk`DH3_=PE(Er7|SwW>h+P~&4M*GqiKxP*`W*cYF@)IKftlY?n|FkR)L|h2|Wi@PD*_1&Cbdpl^2y&4VgM^s(uc`E{@RUJ3BjX zKf=$>eNe_2+|N$(LX?HNsmvoL3@%lfjAlRYrG2Y#_P>p6rkZ!)cY^;eeBSFn{Om8< zJ;;6{&3+=?jY(x6A-u}?-cMyLX)1Gy?hKKrZN^Zm9e0yj0H_)PC@%}_tqu3 zU+&(fxOM81b}&>nR?>cj^UX0c1%%YLbQ1wPY_CQC})F2?Lc zYIY*s>0M=O5ME_8F?xoZ*)zmo|Ko_nyJ}(00Sz0cl*5Ws@YB<8jj*-S5&2~pW6KGR zu@xfJHR#5*^bQB=io)O0WBRq_>TeM9CEA9a2pQ!x1>LiqJdDmHx{r@T7X1PRufZ*O zJ#f4hDq6@CbU210N6hPEuT2Ds?I=;WK~dnEWNu{3X&A|0-MShtscwsLVqV)o@PrnDo(rvqLR}iOsA{cPg2(QCG6tXwqcY^;WeBJ{(C6YyLa8p_Yi8PCd^1QbZN@c5kBpsOWlUmSP)uBt; zh{aiHG-mM|aX#8LbPa>) z8^wrcqOT(878XJlIHqSb@&z|)x;i=N50K~w7@`xY6^ZiX$ya6Mq{ zixJO6OHE)#yM17q z3SmRLeJF+*na%<5nbv{6Sz8&i5~*21$8}$1M4# zq7Aw|#fW4QbtE5vVOm(d@*X`Q4+~1Uc;QKz%g=P{1c}$laf}`iP05Cj&r5pOV8FF{k7<6zA7t>Eu7pZTR2^&*pel2tEwfE)ZgTg(L~y_QQ1mAT$1K^rwufI=I=uI@J(|ECXbd;4je_d1?4s5Y9}0{ZIh=S<5TlT z#?pg0p~iA{ZEwcXgW8@Mpyt=1bg6Qq<%{X#0J&YhmcqXO9CU=4rV_)6SGG~R-0sY9axQR_Sbx~V_t!n9lZ}>`=Q3{L~3>- zHM`1ac9p^Gv(~ph)33zBi@!@Y&stcVItSR0Er24as5lE;)_C*X?^=ELyTPmJ#`jjz zH$b3(UOMb&n(Xa|1eOVNkHOH7J-P?+0~D^9scJTij9s zCusPCf~*))zu3ADXW8%s8Ppp@-XFjCo7EqmzoW}jc?}m60jf26xvb~=q#LNE(SUIY^U(3@;x{gU17#+ zaNk&8fEhH65y*@@IwT6Bg9a0Im_%mWF&T+Sg=2Xw+-FDIGpy`3mFXlI7#a8?4s%ds z6uBCHXGm(`^FC_*Ouhv-rj@^?dNfn{8^+v`DKb)bB);967vl!|% z6Up4v**OYl8_Uk$;(Tq}i!5 zW~YV=x8HaI;=_(K4V zx4ku)uBbKt>|66FV@)EpCXrfGWwfTsQd+aPb81r_jLRD{<@GopU0=p)Xi7G=6ZXVE zaXN~VY<*eH(9){OQ{#@f-2$~zfdq4&ilKg*YDf^0b$Z~K9GBZC+SXhMJlyBIR;3(la~W&C3Lev z%-yeW1eO8hJl;mTldt1^bTFIO(2@-}76;|tOVypUvK*a4ILJJgI6X&p!<8%j4NArp_L?XUvM$*5AmAjV#B#4b}fp;iS>Yg-43OrIPpjWgfeKpP<7oiugfohNMK&$Ky%Nf(BlvR}_ zW=2`03iRU=%h|2gdF?Xos4yKxlBar3kIE zWj;zW=! zdwp}~nvz1K<|fLMB@Qavi0~>4Gn-b<6>CQ8LRMw8axMI0j| zlXwr}5?$F5wWSp`*b!smzze6yILPoS&hnpnVcF2qiqgs04C1X(|l#7S%{K%M$0gH(Jd6ywt!FaqQaKC;!HzcA~i9Qj##Q}EyAlTLf#ZBXiS$< z@+Rf55sCAH93(!N2+WE!mG?NIrdRVJ@T8< z*i1lU#%32F`WArK(AaEyI@^`@87Zq1`z-*YbDiA`zLcyg3El!|&CF`U<~GyBYQwIW z$N1I8x$v1*Ol=TuUuO(Wq=qKam!B$IiSR0O3@z>8pslYy?u6>bs*nD*Nl{${3-H4; zt^?`G6_YBlEI(%TF}l#NKKAp8T(~C$*sZ5xa(P*xs*$#Dbza!SG%2Yt7Cx(walVN^ zF(xKb6BB9mp)yt(L-fXLdu5vlcv^1OxABC;huinedb zhMAWm?DiUF9&58X=`gdr4hFe#ztv$RO^J~f`!=-f!sSWnV7+ulf_)g#|Ndc2oY^Z zOUZ}mL&`*)W&WV15*K|)`30nXA{8{RVg8^J^m^G9w6$Kn=FHOaTHP9+>Ro5|A}(+3 z*U;Q~gq^lJ2*%EkjYya<`FXMY#0mX*iRKP_7lUyGj%nL~1D$6+Rg1f#g*JUx!ao?2 zS@65VpAG*+_*cQ_y<82S(UstzR_a8WheW#4L1nA`aM4QL&qF^iWPP4yMDpzdj)WT8 zC$Le}{1@X~kBIqs4b6Wjj(zRoVVnP~m<7QxeKE9-y(ks+88^*~=FzN zM?2fbCj`rEtVKL$RaP~&qz)>4XLH`nEe~G5ask~%Mw6cbq<8P&a`;SF^l1e%oAx{vj%q`h!b=}e^gLZmgk%2>mzEM=7xw42+K&PVTobcn+Pp-tz}O`>x! zf+4Se3jG-9C8KjMpUwjeor%~faElk62 z;WHh-^RwwhlTAdLO+Xx)4XPDIx@@EVrI z0vsRkpE!_tK>5_k6=f5())-J#ReEuM{f3Hs{v_Ur(!G26&19m_+&PE>KI7gLd2T`7 zCUwJ4;WIgN;lntxXP?#y+`Uh&Mx^9c*+M^D^IGjPXpN2u*;d<(n^c$FYQeWOGO*kG z;Eg;0(r&C#x7KQ1O-)LqRwGiYsca$it1MiTvW44vuFZtj=zBBUY8%sVO}^fI6h1MP zf!XFlr!gDiZ;It|b`9DfBDEZmJ}0Ye3F1&$b6W0dXpMgN+P2)ic72wll-5>MOUW(V z8WVQGV3%dWrdY6-u^^FJkVsz%scaeURb|a-!ONjFI$X-=|^n zHN|p=8_N-?<%pDfDkJw))|{40SJ&N{hI?osGPPT64~ub4vD#k7YD8)^BCYFGwh&fR zS#w(LR%jg?dFHYC_KP%D8())jbep@9W@^pTn#-DBqHWdomPoBhqyyP1TZ#KtS#w(R z8fYEWh&8WIYt6{`b*45vzpKT_rnMr=jTMR1ibT3rR%Od^zbb1^D_#q&(Kq5YCl{o( zqTf{>R9TCK-dn@PbL_UHDJA=CQ?iNFibQHfmC=eSYfdXRKx~tO)QUuEMU~Nt zDr-(F-TloXXO)1s)nBjXOwIq?g*;m;L+_TD>(~_Jj z7+p|n^YPZSmOO2G4JNAS#Fb1f_-M!Gvfwj@i$rQcB7II#*)rU#%9_)Hv!OM*f0k{* z@6xs|W@&h)=F9GGnXf7Qn`>GXBDEe-p2sH?mGQl$%9_)9w?ON8jg;h{q_tk6pNM_o z&Md2{DVre!U6~s5qpp@Qn^Z5pZ@5UL)+Ewix5`%HzE#$o)=bw%Z%Es^M5a|{YQ&cg zvyIp!E8cIcNTgOI($+;~Y+Y2=oK~C#to zP2u2`hJ!?EJtF0x%E&>LHK+B`waF)@DZ%4wPUbG7WfM82E;IA>!uv8~zNT1jo*DHg zQtJ_^^;AadsjNAzcNMfo=O5bj-)U*BmuQnGRc2a{M}#T8>C9N2FudDr3)3W&cad zof)g%!{?haqg}Dx@HWMA=bJi@NG(UCmQxumr?UU0<@%@PoIh5WndP2ouD6_r7|s!? z<%raBDx>987O`B)>Fez9=J*FZXEn^PA&ZVA@ESxc$4@YYO&xkGiE1tUsL{7?Z3VWi zxZw1%(uv%)U!Ot-mR84|iMD^xXapOQ)F964+VTGWG?*_;P8MoHP2@fi^5oSQ0x$o8*rNO<^koHIgs;G*lP@4|_5 zBTwPH23=k60vx|$Mv6lzh;HSi>#0#TrlGSGUA4rbQI4YFOr%OA$DX3|#}0n;&t~Js!k@WQ3I9<1#y1{iep(g$?)Y5;|19|U zvQ=Fv{0rgpUN3@=g5}jfiMD}6$^oK0`J#);UiQOj$x<0hmWGS);&GN$e_#J&ar;y7 zGu^)aiwhBEYj^b@gliLKc6ar^5$B`56kbE?^}z8`W4Rt=tZe))L(%RU%S7aM9`ACD zmB&Shhc4A_{Y(#YI2%V0w!gnyKa41=PxU!mVS=`n@%Q{7B9vqh<6rZF7SE+ zkqrf2F;MFHaf5M|tP9*XCy-+?jan}QAS?FFnw{{-&kI03Dtra%`ZDr=<%JM zU#pQ6d7|Nhbbh5P8~Hl1cG|RyF;!ldsDF$gB5{@%76%&PGri19P8DYfr28DDjrZ^c zd?@k0gx?iDzPTzJs(l5YNt^{6YH1|Wyd~1LvMSr?hjV6*rI=~A2g2i4jHAs_$s3y| zdk*3?48!BHBsP!k8j#%RcC1k3JKN}A+d~*Q{{@crK|uIS2W{B`M>`yJ>ph)y_X&L3 zY>KfNk=l$%pMO-g%nv6v!@{+-R5WXKi<+IV+2Fbs-4^<+K6f$Jkb4EV?E;yTnVQLk z)BqRUBdyBP%im=3bR5yC{e_S*43}PfVD}Tu&^W4_=@Uw^o|1DG5h{tJ`GUO`_JNWK zmF1ZCC@lxAS8QEU2+SQ(Z6?AJbxgxc@EOC)@Y!X41wPY-`a-Pw4Q!xHBvPvq>C8`+ zEkJmcMS53ehOM=Q@nYuX8OWCc$;s4~Ekd}!s(?;kb_Qh89dvjN5+|$LrX=BOc-e97 zbbP2UZl~3(G)^|k#(1MkiSbdPI;N!!d_KnQ0iQe_jeA#%5~)RrwBA-3>ur@qT2=I% zc7Jqm=c`^oe+yr;PHbRUZ1yuk5bS0Y?K^dZMzwXZL9}kP@5EZmw)(T3*g__@!Mp+I zqbss_4Q>EDM>jr+)ty>G>^`uvw!+1-(cB@@+#$;24j^*26~A>VNZ(g#xD`fbl>uyV zhaI8cF}vL5t~z(~D(snRZ|S|5rLH5QE|3~8b$RHFaI{WfA=Wgl{NJo;&cktZq*u#p z80HWh>)YU;xU5N~J_b*3pI@Vr~cmP=-JO@b9|n6 z#yzPeiPVxrdEPu+rLwzy6l%j(mE^0{qULLz%zSK4J3(!M*99oG`IyPP+gu!UQS(iM zENVVpL-V0^^8Rg^Z(8NV49!PtB9T%pk3HMBrt_G~_@d^#%Qt5iT(0IMQgae%MXWMb z#47t6D7y;BJ2>9M@lPBd;rIl{=QzH?@gE%D;>c=^rUAz;ICjO+2FG4F_QUZUj<;}Z z!0~S!|H1JMj&E^n!I1^4WaHQg$Idu*!O;rGt~hqbQGjC~9PMx%h@%k4Avlh~(G^E8 z9DQ)~!*MK*<8chYaRQDK94Fy88ONzOhT`B_;t@DT;uwu%435b-%5l`#!#*wgehwOCAzHA0lIff%^-hiE2dd$H$1+kV}DX0+WCy1eCljHci ziQ_F3$J-{3pEXMy@0vLNVd7YA;<%$(;&|W0@qvkBjfvyVW{KlpCXNqH9BWM+ziE~@ zJ~nZzGjXgpar~}X;`r3W@tKKZgNfsTW{Kkq6UUb(j*TXchnppiuT32PHgRk+aXiv2 zas1cB@r{XNvx(!0W{KlF6UP=42Ul{n^jOZHZk9M&h(6XO*@9S?b!-mN@u?rFHwBCXNCV$E%?@f_CKp zeQi&pb^w*dMdfT~gElt^WBWY!|6y#4gz^8|=YPu|4m725|DPBC+q~G(>J7Hnsa(K~ zIAM}Md#mO^Pr7>#>e(PYLHK~b!Lv;e7l#1pxN`>`hdJqjr((WZqQkyc;`sDS$KDFv zuIkAk8zDML;?P`*Lt`n9gM4&5dirRWVba3$4u=S0-kld{v>fOgK^uYoBdBeTju^G{@cPdC zN@U}Jz7#YY=yO5$0(~ZE8PF$!HUO;?RDk08k)Yl{9|{@+^iM%`KpzOY8|XbjOM(6& zXg$z7f?A`nza^+U&?-Trf!-8!8PMy3ZU=f>a^Y^EcLd!J^sb-rZ*6wqoxOMu=J zv<&EdK`Veh5cD?C8bND-{wZiZ(7yz21o}|WW}vl#a!?(8Bq$%~V?hN#>jbp}S}&*w z=o3L5fIbz}9q2Pb{ehkrGze&^pdmmn2pS3WqM$KAe-$(lXqljLpqB*I0KF{eGN4xk z%?4U7=vtsx1>FktnxNZ({wC;dpcR7d2YOx50-!epJq7fppd~;n1uX+wC1?fE-vtGA zXPka9DB}&6T*Rf`p~BVRdI-c(4``m!p&-dv*Xg1sAHU8J#G&*fl4|4?bkq#$r*whl zQAYEbf(mfOS%M0IxGzo9N72qUahzk~_<@O|Q_?u%TIO7%`#eFkOt+B6xOp{2u4i6x zZ!h<**!$WSj-whEFu3C#Jb{Nf>`Q46x0rAt)N1nj|3F~eJrRw&^kdKfYuA@4D^Yh?m(Xk z>J9Xnp#DG`1Qi2)E@%+Y7lQa&@k>ENfHn#m4)m3vkw9My8V&SsL1Tb62^t6VA3+m= z{wrt-&^Ln0fi?@84)m>{8ldk4%>ZJDyQOy-z!s6!0ksg>Y@jSbbAWOLT?>>g=tiKH zf^G%cNzh!Nodw+vw2Pp5K)HhM2Feozuua_nlmDkne7T72BtiK=y#=)f>LaKCsIQ>5 zKqm`o2Xu;{LZG8?Sxc|Tp!Pt=%GnM;rwZx}G(=E$pwk5P1{yA?KTxrtVxSWR4FXcl zgMkK$Y>1H!2O2E0kw8NQjRqPfXh3x}R_GN@=sRZOgNRG3ZFzZFjqe@PwPWwD z$5eIg)w%na>Z%F86!SRBr&i;;)?*B+o>Dr!ta=QWlvhN*{?u_w-@|GP+jl-P&r5oq z>-UkKZR^IEoGg?3W=@_bXzOzFT)CDxIZjYGC;4TDmL79*yrA?sd5(l*PX0hpI48%5 ztnr*YWBA~b(@UVBY3^gGq;sI;CW(}Wsux5~b&cpF z<+<~}8tPg>G}QHiNckHC0W`_IV(#cs(HFj>`$Wb&x?d3Qh_i@W%KQw@$ZjdKfF2T5 zh_mwr@s1uA#5?+fAl}g*1u^Rv2#R}01%{v>%5_ZT2ZCt#HG;4Y5QXMHmSNJSKPEe^4Mcpg*4_aFg7ff1k#4ey2iQNn9l8a?ha^*l6KXn{>G(3G%xe1( zPfB;K$>^Dq6cV>q5HtEhL9Kx<7R0i6i6DR-(#jjaxvjvg3R|pyhbe$j)_j*B7fNl^( z;@&8T#Jy4wiOUJnQQ}@LvO1i-N)UsX10ZP1rN$A6f5E6HTna<({mbD54x-&PT@pG+c0B$&#!|VUoj1;dRNv zKPOrl{sp6-VIxM?or;s*K#&^V06);8X`~J-$@0_s$H1>iU|Q|<&}ABRqJJA+)R{C5 zwh>o`lu4X#iHJsg*PINJoy;hjG8!eEGAc_J{yovk@N0~IhSfVsy8mR-+X&J`>wFl} zWF?%6ZO6cx0GcwKfM_^=v$CaZ`2A%_y(ZMECQ=tFT9J;?ejQRG;^5zZD$8lTLpnp&DQk=h`qlZD?RF)@6LP(2X3JGrxyEARzEe%d~1HUw#6N_Prr zf;pSq>x@i+2~kb z(&XBu>XeWk6WLG^Gs}ky3YV%Dez;_}qDkbfB$C(|-OdpG41Z=QDfTU;t^YtXq7L()47GL9;1LW;bL!aorpS$Z`cOm8?H5Ew`0 z+F&pP!VQKA1i)~0=Ducy;@A6%Hk(}5oAkcy9J@NC$d1sfms1S9^-ZUym=*}9*p7&I zc7wUIn?niWou$}1pxBIUm=7DKykondaLW#>Z^)F)HFuiG*C6wg<*TNacNI?Ua(T+3 zM!Hu+zbLtA+0kA1dF<8Rd2b%t|D|Qij)mxWuJj{0b*q$tW>Vo>x4fa@zEcQzuUP^c8RuueZG7NoA!q z9Xofv2@9lD(s5!{*@T)4%czU@o1L|oFyuN;EE``tx#$cEX~yiVwr6H}^D$W_;ruXs z{6stqGdpq8M;)uMcC=J~@P4whPRGOzx~B{GcuG;x87Fn?(Yt#u{*o{rC4Ktz>_S^7 zBt3ff?sjWP(z8#O9#oPD)3Z;vUMoV99(}rYUmun9;zX;&RXzIj>CP!t2}#e+UHZ(6 zNV@e|6Or`kN#j^ob?MT3bVSm<>%6F>dp^u%UDdU7@AeT%w{CS2NzX1zqmpjjp~UFv z-nm=PF2f^|UR{<>V_%(z|Qtd?dz}bnD*RNIGI`(HdVf zr-f!`U2>)8-GbnwT0HYdJt1L=X2=h|J;=^_1J^GB%E^B5S}Tk~SxlLo^)AAk49Q-d zZy&37VV6qQpV?WQ^v7JGYbD4|58i0vvTowdo*v%8}QvoO-?VQm-I)5g(*iaV{I0tv(Emcf1P>FA+l(%l!=q-SSs#{WRi zUXC8_1dvV->$32D?c?a#H-?`5BusnjzV>zWU{Cb4>1iinI0-elul*f8*kUKG9xg0K z>tN|Qz|q4}p3Xjn62?x?L5`k-W9T`=(Q~k)=g=5>iX;qnCy=Z01K&8LrR?%`n1pG( zd>t-fIK?-x^I?vjBVy=jFJWvxAK~cXlK*seK1#ymTIo5`(Zhw@>GX7vFlpe_S;FL4>FMO?VXrCOeRY*EHlMpVdb-8X)7?o=H%Cv87<#x@ z5L#;MzIr%%*mX*GU%eeYy&OGUSf5T0_Z7;{V#hJa_dbrEelhg)cl7jg^suX(EOh?ZsN6%R? z^o*7;T-FlQ8)rFs&W@qy90_B$r)N8Qeh@>?7ztyyJ3nyroEt;Wc@oCv;kk|;bl=nF z*Ek7d=hs+APiYK2<0XuJU!{(o2{H6clrT0ACpdb_V(6LVq^Hc$GdYHyDUP1Wj-IJ8 z^qenY?D}x3qvwJcddek?-5V_RZ_jUb z0gOHmR!Nv~5cBDg?uQ9I{xfVfq}f^QE#OhvyJz3y@~kkB(AD6`&T2faS_xBZ#Z}|P zb)kf@`&zb9A$C zq>F2|gc)Mp*DNQlt0asamlX!*=&r_*F0LO-7@LPzJ8_Z8Va{7&aE`7XN4mJKkuaOk z4hH3`-ifP0!r1p^g~2(xYjI>}9fAKak@xBkSE9p6WRLA!Ct;TJKMuNU6LG1)yB>aa z)@evj9?;UdTVSxLo*N`g5yY*`RcyuWajhFA%%S+7gX13qZ#(CDC$5_$40|1Pw;Xcn zd^fI}aV9%!4gLrHgqs{aw@4UyQUjWQ^e<3}M$>$&gjr_kxy8}*6A8nRtPgKJV!sDm zJ-11i_D~<>*H039{QB^x5{6HgO!L$^$L(Q-frM@@j_j=8;XmWLXTdxeHJaw1Nf?eG z2XW1H;`+IS3F7*0dBssy7@VW~1&-`2hG7inb$D|ZH?G?y%qIK~?EH&FT#(Y;fg?NX zOZ;bgF5l-J7(SZjUrLxY7N74(=<)6ID+$vP{~6be`l|<6VIZNKha)@dAVRpkD_*Hc`%{J=NPIIq~~z_&%rUR@1AE^VIZM< z7)N#%YY)ct!_Qv8gF-aTe~>V9thgR_;`*b63F^9Y4y^cr6$a<%7U0OvVsDCZ)%@3Kr+;NDr@=^jt$@$LL4NVBtovixL=${Z_tG zOH?G$`+82o@WzAm{Ke7pd<;FPZg5|Aem(E#c_D_L7bT26uJwYW=dUsJpt?bN?0o;L zqvxdHBKV#_mmxQtN z>z|IE4`b+AD`D*W`q0sXu1wl||5(FVeE!JMvo3}n_G+@T?DVX2^n4OS&!>)_PaHj; z#n6Lp6VhYXho3omK98a23khS7YkltM`7(wc_G+@TY&~B(dcKOG=W9pLSB{>4OPH(h ze`g$D=PtR_Z3p?JlbtmV6++Or`FBE(-?#aXgz1C-?6YxP%L)St-G6apXEh$zHxj1U zitE2lT$?3~9hVgb=jgu0kuI+9B#b?-^{o@v771g=Wre{xaVQb#;^K6i>@0g+%gbV~ z!X5``Az|#etT295cz>8SF7`CS<67BHTst{&Sz-LRTE>WLXD6J5NFuw)=gYvbz z6BoYm5V4^Z#*Yi%e?XYV+wMIjjP$t7RfdPYgf(+^)-m|SXOIsnZ@tW|6ZVoYcAvH& zk!D}d-ZAv-BVkwrGZl1uJ9=0%XJ^q$9A}&H=aW#8uyXd28bF zuAajsj6Cg{tD;;zLc-jO^W?_T+KnSzJ?$mTJpA9?*KwLaI(mA?(9_3BPj5$0-xzxOIePj!diuxEbF751 z^Q*t3=eQVpj+ZcYejVrNDUP9MfP}H_T7(>qq62{K=fsUR*G4zx;dImXqPK=@F zBuCGQj-J6W^qeeVY&#Ej^qdkyl|F7Kx}dWOW%GgQLZ`8CARGfcuXUjOjzShy`1 z=I9w7BRwOW^bB|OoE}5Z84||k&*_dHwvyRdjn{{xB#fP3BON_h_K{Z4SrW!>E6;TF zjE=ldi_ z&y*N?rb-yQy_n+YIX{M;3miS?J9^4v=$Yo|DR=Z##L!de=&5k@Opl@GhZ4rluj!7S zsu+5zC5&CZsvJEvG4#|*7(2ge96cAt&~uTKo(mm4Gh*nu*h$X}N6#fO^jzxbxx~?P zSqwch9X*#hdM=Nl=SLF8E?<{Bdg@~6xkAF&^+uhe=gJs*W=R-3->-D^%#NYwDhXrr zaJHl8>KJ-{?4;*vN6(xXdg>*NZRa_To@-+0X^=3sov(59TpL5rbrQz5&$W)8>tpD- zLBiPe#`TV#8)N9X$w|+Rj-H!i=($D0*ml0z(Q|7IJwK5!ww-Tv^xPIh&rc5Sr*j=WKbJ74K?kq?@3GH3;OhB>gvqh={M^xV zyM(zII&yKGU3l}puAVz244}#!k;Yj-GpC==q(5vGeO* zN6+tL=($hA@QE+Duira*?vJ780SQxV>ABz0^I%9%a{fHz=y}l5Ge4v!Ie#8@^vrkk z{2_*(KRSB;;OJQpL(e0Qo&}DcM?-p&+vhPy&!di>$3uFO+vf>K&*P4sKgH1Vq=XrS z{{esg*!e$L(g9%j9tE#IC`E7=}B&%=N&!IIeM0c^dz^>3lhe*&r(Oviy=M9)ALtH z&x?+pWg$J;KdXMqZFgRhFt&Y`IeK0W>FG24pkKRsUUAa%vZH5tNKebZyt%;D^Qxm~ zxufT`ke>ag{_-eS&)*z9uQ_^Fg!J^!fAT(8&+8J#E?+AgJ#U2cB)9XMj-EFhJu5?c zlJjSkgt6Pfm5!djhx8=p&s&b3zdL%~4(Umr@9#Kz-gfl78`6_J-~Zw0dDqdiI;1Cg ze!b`DS?%a~U&0)KJ{{eFN&9Se^Zf$}V~?-C@90?*(zC~gpQD=??brQN!r0FRYaBiQ zilOI231j!4|K;deD`9TIJuwvn%GdtJP0vRXW;M3MzWLzt`)wa+Jxp7oBNPeXdX+xejnTs@yTdOmgZY>+Tl`}aQX>HlET zYcxHdOBl|~3GB1M(es6bxd&nBK3OmplSiU@zLYSz_#f!`!qKx)!W;`7e22L7o@WXHyJ4|B*0DEIpeXJ^ziN=Nl(I|8?|ij-lsU zN6%(Q&v!BOY;p8_=jdT3XJ<8@Us)0c4Xt@E?6n{R>^(7B#L$y1VHR3?S~z-gV(8gP z!r1wq7?2|9ahtszJ#Ay?;dkf4bI98|diINtY3JxUFovFkBur~d&w-Af!WeoEmM{gDogYMd(Zg9-*;$SA z=P(Il-&c{N=kOSMj&SrG?&#qP#B}L7Qo^*g?9<-Sb5smHM?2{`%F)vyhMr?2j9o4| zIC?t9(9=o6*gWj$=;<6oPZtSe=T~P(PuCcFx=9%OzPdVkI7>ENe)Vwlba(XhjG?EO zqo=2%r*{lJeI$(Cuj}pT=__G6{U32}0$xS2y#JrWrYMSt2<{*tA}V1M5RfG7BKt0C z3?x7#Bq0f#f}kj_fIFz5C@LVLxG%UPA}XR+5m6A_#pSx7;>P7yRb5lleQM4*9lp>1 z`OouQZ+PdePgnPJ*UXtY3)EEjBew0S-=^#O+<`pyIG?FF9X&Xm6sM!&oaMpkOdh*# zoTWIK9-J)l*z+(`ak4!)T~t2ViqqAD(~Ug#ICoW??jD>T^^=^I*jp>cJUC9{apARB`ZA?dkFvK^}V^4p*FWJvbxDW6#5L73Vw; z&iUlA`*oh;T;OneAGYgGT@P~<=K{sK(Bb^OvF&}DldCuvD$Xc}GhzHGT{LGjdFQ&!&Sb@z>cN>t9=mQ#Rh)}GIG2#euFn@M&U6pX43*Dx#ktgjGgEOcRh(HK zoXZqvmf~FQ!I@1SdweceoGUyySCYq`&sQkU91qS_iZe%XuJ+(uLmvD5b+zJL>%qB> zJoY@iR&lQP;LIhDeg3*$aprk&<}1!T#ks+Qb0c}|<8_1L+~mQzS#fSsoLf9Nx01&m zpIa2?HV@7M#koy!7J6`QSDb~4a|e08gj!b@&RQ?Un)cA=uRF=}5O{*m3f-YNi^zkY zfr39```Z66>is|Dc^UQx_t_RH&Ryg=kvUf^o_DX#=Wg=g{ndbTm*OlTPcC@yGrYGw zerLpa`5yAv$7_k=+)JLe(0BYS)uOL&U#jz2N}h4x2|oLFuj1TC9$bUy>HWuQcq=_f z&UM25>jCnd1pDxQX3-z*_F5hcfo&Oi7Q4p*Sna6ZEOeuj3=e@FDWR!$mo! zD-~yz!@2IcF7SbGkeo4mm^?AaCzucNQMcE`&0?>pVEGE6zH_S?|GlLvhwC&IS+8n~JkRao+OaysbEIDb7X@&O79( zVjZuIinGas^DcSp`MgPS-t*x6hdh5mJqYUIdy4bE2j>Iw*z@px#o6q^`H(#JJlw1} zTRb=)k;m@W7RA}>!TDHmwkpmi9-M88^NHeY_uza=9{ad&SDYOloSo#c>*@~0`OJg! zx#E1LIA3^hzEqqq6z41QbceZ$*EaV&b4A3xrmx9^&r0yR4!5rq=Ns}IVRpxEYI}9W zJ+yDhW6z&&6lWKC;6wPdcGh3BdYwL>en%erc#s_kjGvZ-z(0K9-RLw&X0=o zlLzN#^4RPBC&l^2gY&D(=NHAL=U*0gY!Sd*{eAFJUICF5BK|;_9;%BJgL`LCGyzg6R(VC zGW$J3l|49B$Yamv%8FCfgHug$sw&O_9-IToW8cd?Kyj*ja1J7mJrAoZ&cPlW{0%wx zy&?xI&LJM0L&;+wuR|24rU&ORl}}B@spY{roILh%ucbJ(Jvc`wPHn}hbrt6*56;nwbClv7L!QfF)xpA#O~3w!dHOtv@6Uqo^0Kabk5QcC98RUx zeO}X?2LL`iQ+W%;G9Apy#EutzG$jA%{(}#lBcJ|X{I=*d2miw`JARW%{@37iql+i zT6l0;DozWak*A}TPbbCcOrC4F9xnMPXOFI9nTpd{ak9uWmpQkdFn^}zWRu4} zURjFMg**$H)3NG2cpQzD+J5hDSHyRAW!P?>8Ut9 z6sH$?Qupg@#p$Iuy~#5Sh6JBq3|{*wAQQ*u9P+$v9rxaf(}z60fq~nIce_BzOXTz= z&&j|EUZ3_+oPOjP0St^@clxr3^J#zbWLTVjiZg&b9f1LV#I`N{Wuwk#AbITTjRA@? zh&;W3f!jrsD?hC{gUNHMmCqo>8A6_*Umv$07V+8bp^7s^afXp6=+~i#T@4>2NF3+k zg~W6z(7ic{vnDJPG8-=<7)CV6ls zt9&LY&J+*MRPxxbyQe75G!M?jMZdIHG9-M`Wvp{if_u$+?o<`Pn@9m0nrw3;ddF=Xpr{XO3;M_$X zyB;o9oVz_ZOBCmB#kt3Wb1!-9e%+%uOFcOEDb7;Gx!;5H0D0c>k-9y)PwUFdF=W8 zsNy{C!FfXE^SI(X>A`tQah_D1r#(2&D9+Q0^Q;HwIr7-ohtDd`8V}C%inB&>Uhv?& zs5mbu&P(KJ2j@WCUaNHx+*U|D557zuybloE7kx=_Uh&|(syMGG&RP%7YvjS#??FCm z6=$6X=XLV5wm9n)XT1mK4VBM&#o6G&d6PW$IB!s#w>&s+lgGZ#_Lkyo^x(W>Jl6PZ zRGdv7oOcyxlj6MR!TFEkyr($tdvHEboc9%Hvj^ux#o4SlTRb=)k*A|I&RY~`s|V*} z^4RlvtKxj(!P!P0yk8fruTKzVhIFt@8OwalY~3e5*L$D9$bq&UfUo=g%(1`QC%`19|NF{JrA*=)w7~ z;{2#MKY4I|R-B&{=NIx6!8s7;e9qD9M(Xq6ujH{`=l-HNyUA0CCsWwkoceXS=KMyU zZ()D1zIH3l@8rou2y7Xxe`%;We~_oYwJv^FoIT_j2n_fm_QSQYMVj*`dF=Q1?oph- z$a4WO@ao{Vbq~I&Ie(MKexKf7it`V7`f)zTzdU)V=KM>Zc2>XsQJlRVod1!>UhjJq zXP*ZL-@;cpZs)U4apL4j-LFdIvDa6;3eEuM{XZU@D&(>IRatSWdT^?d$6lvZ73To* zJPcXl=P!o-`6qlGPU7|9f#fN)j@JQ-Q{97e5P8N~oa%~mum`7x%I9FkImCl=sNx)= zI5j;uhmptbS53vK<-s{zacU_}Z4b^7E56;8j z`CuKzsY{+Uz`)PloH4)p1DaEhJl6v!_{>pV#W{*RNm#mAE8UDzMg=VKJ-IPwJV?|tn*=uTW0$CC%wdoVu7Db5KF=b=lg!N<-L zIrYhd^(Ww*pg0X2&SQvq# zoR$0Duc0{^iql+iT99V|j1A8D4IP{1YfekWX`wi+98UbpZ{}!DYx3ay3HsGaaoUh4 z_?+Fuou5U_=QGG-UvIQgoVE_*e7R>pn{#QSu zIcJimEA%Ulh2qsi@Iq}w&G+dP8SbOSMu1$y^G>>BM<(@ z6K+5DY<{iIr@P{GQ=A@7KC3>SAMrk-o{G~$ae6tN*EZfB@xF_*$@3-T8yv4*iqqTS zbXnN*INh&v$n%56>8&_@$P*m*Tkk&MRL$wDIDHhSA9)%8CgY z$b;)0mQSq4H?P6rOwXO<51w~|<33DrMv&(=j8&Wh@&x02^`jSW*7;mS9z1^q<5QqG)RW9pKhW;(9M4PYo-d35rupo}kXp*gEqh%_$*|JW zsyGuBr;I#j!m)rG3$gE49FeCv<>ayJMw#MFA`eVr+M>U!d@_0L^)*RxrjRG-SM+tl zRPt@!tTev-Z(Yh6y zbA{r}R-7xzgRdED0B2tP^Ka6eIplc;Jcm$gvDlT0a}{~s;QePFI&HS*Tuq)ofm5A* zS1Hal`mQ>kdE|MBJ=nFmiZh=)_)X(DhEF{61l(FktYbHjXB&8e@tLnUH*5~8S?a;LPvx^zaqjovJU||MobOkhWgeX6x(u4Dm;;dAhRUVv&6=#*=JmSGwtvHV;&Z8cj#}wyL#d+L=^8|V9 z*E^3Z&XXRTr^sW^=O-2CX%EgbH6EPj$z#vMHH!0s z2j@ld*!_AzabEJ^ysYwhNpW8B;Jm8xc|~#7dT?G-oVALx&V%zhdF=VKPI1;gcPX-+K;Qq#Eit`0|x&jCOh?P&@{e|XyNgljW8F0Q( zoUh2!6BszobvEzF)SR!$gZTu<{VT=!hCFbPX#1i^myMe9EqUzM%ik!@E|U)=a{`bW z&FS%*=6pvUyB_XRobSmK+($ZR`(H3k5|7sp!U@Lbd&T*YJi&2~zMlUtdH#ibgYo%M zaei|0$=ZD&70%`HMWk@hUvB z+n<{AH+gVf1jp+y#remB^RMFkqd0pVPTrzL5##(n@|`8QZbc`~L;TVpmlLmwBjvpR$Ag27SB`hI`c+wRP)L_gHS)B!I8_zr z01wWAigSSCRQKQ~KiHB_9&9{HT4@@cF%O~@0RccSb3$>eEdjZYKBX-b}X(60mG ze^<>L)?D}N6!PQ&C%A5DsyNL&IHxL3GsQX0gLAs#oTfOa9WaQ zoW*IOIITQ5t;u7Lb1TJZuoZcRsbI4=&tGD9x@!<4ToIZ-v&x6xnar!CF01wVU z#TlSDgFHBc$z#{CL5efPgELfdhA7T356*DK8KyWR$nznbyWo%5&QmvEqt9RGlILxh z&%x`#5sEX?;p}Zad9>!7N1k^r&Pc^MpFHs5pYr+s4g7xU#Me6)kmn(Ka=(tOw;OKVCH5zJqA$hu5`HWYb3FN77nu*Q7Ambw4uOjl; z`AkrpVmF_+UyOL4aEZ#NSaBwjrvc~F{M!78=fb7rvG0#fRGc#M1oy{QtUskp_p6*d zCtKrFrZ|%vPK_-~e%GAIrzE?E8l^ z6lW%R+B4_P1A3mQIkQwgGZp7D@&xz&E^M{tNX@yNJj<=IEV2d+bajqoKJ-`54?6O;yeW~-AL!KHI=Ss!7iac$Af!oA^HLlW}tI1=pi>nmp z8i!N(^N1@o=UT{gac(5f8O$j;uIoFRa}#;s#;dH;8x`kf z@&xPjt!zVJXlw8bT^%NQAAz6gFN-D<8`~@+({ldiBdl29(ZBIb<`sAECS9U z;KS`s#aT=qJa1z@2krjfLOnirk;gt>ixuZ?@&tA4uvq;rnzMvFI1k|u+U{1Id&m>q zCy9Pv?!Criaqdx^rQ`|nIkdxTt#v;4Db7;Gxt}~iU43ZG$MD!Gaa}w>o&&9X?pK^; zP$5mr7c6lW!QpeWP!?EIlnh7$Yr z5P9tL;7Y|=MV?^2zj)mfdo|}_^4RldmEt@?o?yLq+tJ|#%~`EDk0{Qgfit{*m@?dme7-I$V_kF54PmrgPHO`MK&XeS6YKA$s))yY-i z)S5Vdo+r;v_Q3ze)+o*klRS1E+n_jad2rq)&%ZD) z;1Al~Qk;z*oOcvwqvCAx;Jm9in-u3g56*uS=RL)F--Gjk;=Hdon>{!mlEAUntI39-OZg=PSke#)I=MdF=V~jpFR`;Cx3OyFTwyobNq2 zKPb-kiu0of=f8^cqvHHTo+G%K|r@9+rDALPOM6L5Z4oIT{}35?3{zv%a& z{Yjn->w0XD;`~LP)bB(4n>_aX`Ac#BAy0kC1xMx3Nvq)!IB|UbRh)kmXD@m1x)-CP zKgaq%@&xy&!4})AIQz(h$>z5v-^TDq!sT{}a!(g2EDNdX`8O&)o?D>wGQ;9q; zg9jR=EnW@(a^C+#9(>(|`5g7%=N4&B74p0b`vXp8;(!o)2LA(FjY{>25R2h^Sj`qF z+X5jLD7zdbC$~I*YC*Xbl`|%H6ujVelnKRnm2WoWkY|kfcf6WWz{5&qQgH7d#zOza zKEe!#k;QG1YXO!7I2m6=rnPbMpuiE=J0vqdRq<=Lu16#g6?1R@o?hDhE;BSs5#ynXHTu4}PmDZi7U@?-axB7g3I` zVw4}^0l6(J--$Aqm2X8UW97f1;3ws9TPw!`KSzYya#8Tp5x6ak2W{a~7ThMus0Pd7 z^LXHCR+TKVA(Hb&tn?EFU)$sMl(dDfSa7=|9&qp)0=J*zfpRdcM%<365-9Ch86f0o ztPCS1XF~pj(IwMN7`2sCR$f||Ut}rx=QA92dORS%!AdyiKUB(>taOrmDskDmPx^Hn zE4#(hhn2r1=Mq+yNYorwW=PaMtgNgWWcUIr_e#`eR>n%y@2u>Rw(1;cy52!N8LS*4 zoMEh-St)31E-NF2^D-;Pi1Gs~cM7>S-(-AAJe^s&NXQddnJb<z=d@ZT>Jb^S0#@D^&x5R7Dx4o#xko(B`GRYZWH^qMt)kq+%6rnU?W{Z{BX)Xi zlg|^P%w%P+wEjFRwS-fLFRM3*X9z2u#B(bvr%68Vv2w0NwW(uTzeM_V6Dt|w`GA!U z;yL9=6SYRha11Lu#IuZ*YlZV2E33qFDt~D~j%1k6%2%S?#maW+*T<~9E+f{gp2_Dm zQKqv}UD|q%Lr21`^^{)&r9($*|iP7%*bth5nN z&0|dKPs$kfWM!*(=CE>wa9(F+nRu!mYd9k$!w#(M5M?4OTclqPvhrd)Sh>Hm^1LXS ze9O7Av~@8nb%nE$l}(c2LC2eXx`?L-E5}GavsvjWQQxpqAZ>NU55vHAym;oY(o{U# zSXm)sSg$?>#Wsp(1S?a8vxt>D#q%jEeI&!W4GiafQTns;mh|g-RvwNAW4N7_heSF3 zM8nx5t&eBrVBx&R%3ASMX=tL_il-|p%_N^|SQ#!+`&gMK{VHl?IH!x}SytMMr$J-m zc~-`73@h8kvznEwh4U{fE5*~}B*QsB%#f8YM0tyqPo!UmH8D}I#)B~|W90xLKg-H7 z64mHr6ZO92Gl7*J;(3adqonnJS?MlO>4Ok6AfFJk^^U&I#ga&&u60Vxw4DE1nxzDH6`h ztlTJ`pIGT48P>@#ZEX;x11qmczw%hQHy(`Gd{%yxww`4rE>SWz4)A!qs3FJr6D&KPZlfp%ZOdX$_DW)WTjjeRC7!;l)RESwu#zoNkFzpb zdhs1A^~7@&Je$LH& z!+B3U7qc>5I4`ntw|L^6Ow<6$umdYwM480OCh6B>tUMME=2+FU4Cfzds|zbNCF(9# z){AEcD;>mBzq8>SC#_$=%Gnb2IxFL)7fmuvRDJP`XQi2V*0HiuMyzs{iP|Kd?yOua zoaof@|Uz#w~OH%B2ne6tP{^uth5); zpR9C{)=%kbIAbJgDl6Ai4qAVOm3HF!iCnw^HpqxgVC6^g+{emo!r9Ks8u8TW zZa5Pp!>+9C7Nv}p@2dtG-p|UX@j&^Um2IM&(8G}HN?QY2X)K%ttb8UJZe(SMcq;ca zoXXPE99C+H@(?R?BmBllUl~&?e%gP0kVcoM0=Q8Qn7*<+~ z=N?u%i)R-ruSm|v_colb#50_gdBVAcmB+=iiIsfGFn*5Vd@o8XR=$ui9LLJL($kf! zyd%ngS*a;)HR@x?4TMw7%2vs6IV*j{^BF7u2&YG1!#P0uzKE5HlJiHb>=EUNekQ7^ zC}*=WR9e56l_}EJZdOhePxJnU(^fpwSb19Vd4!cu#Pc01bA;1mfZ?nV&uCUgN`|+w z@|h?bSlKG$vyYXR&x#QV5PPwO-CB?HPWyCtkjg8r?3*2s4amx1sU}C>hX`P&s29j2L7YDw9EZ*HJcrvKlf7J>3i7xPuxht3bKXQ4YQc z`UPs}83)ShLR)zVl#&Uy@&hOtMYb}2JdB2;tOe!eV%u{%Q0q^zl|oQrQ*8xX-svdy zq2<-nY|lJUN-nmQKS0U6#8%FOTn?LVD{q3b(^1ZV?3T>1Jr9CXa;dExTLR>nwz3G6 z!)Dn^wTVD>lp;`8UuJvW0|mE(Dh1W%XI5ZLVg>Po52ey$O!D8FrRL8w;z88utXw2Y zA6Af4iR>4#GNo#uJjBZVqHJMhrYQSZ>0BjFFtx4S8og$Z#wxM}=foawTdzD_=-HwPC*FHcULdSg9$km$1@Nq8?!7d}(VdE60ga z6;=sui)DOHW#tv|3}>ZK$a7ekFP_I)$&!4wu(Dp1e^_}*dT}DGNZgjhgYoIb%J&h)LpDREuIamG!xHntc3Hq1*~m9keUXF;VgTaa@OE0g1aayctUin3Hi{m4q4FlVS(W(znol=2)aT_oxc zR&JGXt`Bt%x8CCE#mZ<==CV>C$~IP3$%xg1>WJHDArE8ak9d&bbXH8Q8xUFR?qN@c zL_Nz&o+$5GoJ!DUEcQDq=ZfdBS*XMJr^kcVo6W+1!za3BK6jf%0{kcNT&0u`mD1|6 z#HeDWtYW21M(iC{hKTYLD~n~sYF%!~{lwFfl~dwDhP_#-BqKkL6*H=Nk)wJgds++U z9#+PQ@`A;wM2T!w${$LpJ)5ktY~f_EGF6m5tc2q{nU${MxrLRBMR`m`ZDXaoc>ZQ( zx+wLoi18MTST-vi#WRwX5>d)k)Lf-3Q_3r>oGF~`tQ3jzmx`)=WsJ8V!_!#lCC9xV zE9VKPn3Wquna@f%s?W2MDV|SQDHr8$6?N>K7;iy7{aLw5q9(EOL@e+uR8eb`((Eb& zzP(Bibsj7CR1K6nSs5>$k6BqJo+GX{oJT7KQ3F{C`+hSkRmAh0l)kK7C~e)x%IwNPhQG6NhIm?BYdBfrxrCLq()UMM`9?hOyRWp} zAe^Sx8Rbdwv?yS@j@(flQO4OUId?NW&nQJ)x z#B&xa7YKO_E4PR;kCkU6!zWk?kLky(94>9Om}lAwJvS(24=cY&KBvt$Q9p??o|SwV z`MX&8N0cqB{3S}w8xmXZqLeF@vYwS{(u-d#PeJ_2Lt}i!9?=Sy?anY+~hm@l?CnaBdND zXI7pS&lFb1OFj><@{1^&S=lAW>wsGf`D5v6S5`g}^k|Ufwtn82sPrKES z2Z?7iD{Ca58LYGw#@?kufKQmeRK$O>6sV!~cr{i%uUpT#QH_CR&a1JX2 z#PbR(7fU{Wuo8<0tv9>Fa9$8kPgYJ9Pd+P;OIwRs$(Oc1Vx_m_eAJzWe4s>~$qKHE zg80{wD{drvT1x9PSs5eBQj1fG8u?NwZ5Ele|2uH1%;4X2%W zGFd4U<$PAcsEd{IIxGDp>T6c65T)8(G2Visa|SDy$XqQ~o>y3DBAky{`A7PG$lZzL zvsk%OJQGc7mx!{SmGB6D%gSJB>yUd*TUU$Hl9e!Ol2V>xqb%fva(8)>8v~|%0sN2E%|I=WtJ$FRv2=a zVLzqJQOfg5`B^EaJ(x(oh?SdT!BL*h%8jDj%*y5}f#+dX?x++f+gaHqoT5Z~zD4toY>=n-gtb}d7 z!^%jB`kR$uqO^R}kdK#~2eGn3j`HQKES8+_XJwzX{vTHA3i;^A40(?z-C4;JWddRucY;w&zZLN$Y^A-k}IAvR!$S;DOQ?`@)s+uMCq``kS7WGQdWw^ z^ENBtimUa!i5euH4y?2lyU+}VN zt4u2PI#x~=PmNcMroBi%6;NFY@LZ(Cd!$t+$tHCvrY#M7RY??owL zrGY3slEX@wkndupjd;Fh zWq>F(-b@^^F-mz}DRtg5QIE)o^<^a-`D4(fm3>s9Xq2ZP*hkD?q`v4vhyr{Q(r*LZ!_+h7&56f`Xh-Sq}U@=f5;~M zudR##Td9~9(-QNMtKoT~94pSJJ9KVb`%*`OdNR5pQvoKQLDJ;N!Jd`5$UTc|t= z3UWeaA1KHPl|KJ5oWF!~D=4^y$`_y@CsbOzZ#bbc6BO*%WZ}FD3T~lt@CSwyDuY46 zd_rY0D9HI&I6FbXEmWFrHk?o?1qC^wvIZ37OcPF(50PRkgFwN4g`RssK~AXr0t#~W z3Fpi$@J~m%1{CCko{vC5PN+2b$Z)O`&bgrA7AiM`f}Bu!8x-V(O4Y4~Q!5_KpLU?& z7Ag}#K~AVV2nupSMRLgjlKX z+_XjHwwTZtj)Fb?&{o=IfU?O^FrT%K(h`)X9R){qwWDCp4>}6wyu?v3=bIe`bH2_| zFz1<$f;pGi3MLpE%p*oKss(!1*9gWL_fLe`+Z6skTo*e)!7M|i&(2t^v!kp5_Y=JMImmO}HV$#J$qeXnm6 zI;QQ=G}Ttlz~R_vXGkmVHAlhYwZ>7f^~W3qb6(*nc)XT43LdWoj)M8ja}><^N?U1* zV>sPWFy}Hy!ST7sQ84H890hak>nNCWrlVlaEgc1OZt5tQbA3m_oa@>Ot&8f8f;s=w zz&;k3^N)^#Iqz^3%=tq{!JIcb3g-NpqhQX@+X@E7s-0lXjrJIo0S#h}qPfuul}j30 zo>rJo!$y`ubM^biwt`VPO)RAaj!*MbYz2Ed=~PR>0gDYg-BvKgC2*)EAF9~PZRHH~ zG`4d-16x1VQLyi|9R>3_$WgHQxUJ9}`xDZX*4yIo`pHqS7hgLHAY$7c1&`MUj)FPA zKjA2t^8=28Ipe3kB}1BH*E$O3e3_%bKVnlI1#>QT6wEo-Q84F0j)FON za}>-OPw8PknDgn5f;l&~6{?5FItu1|grmSeVl^BEbFN}5m|(0`bJIH2aGKB0bhYxK z`TQ0iW%AH`E`#o3&ZN+Mz7aYXD%jHtp(~=$d>+=pRxrb*oh*gs^K)=Akf`>U;>p=Y zF=uKV=L}n+`Mk=`ndb9-j)LQSr=#FF-{dIR{57^h^Ldt|;5bil6zoNjqu@B_I|}A} zo}MFy~Jk z1#{l$D46q0j)FNqpDjn2}=DccHdWmQpZu^zrp8RShEFBO|gZxf+ak5pD6gRGk3$;N;s(84azP@ zIr%qu?dd2_gYv1PbpJgTt69|^pVgpL5d~kv;>^6h(8`crQ{Un!nDi1+FrWH=#A0oP zgGvb~r#Q;%pp0~s!=do@ca%I(E_0NhK$+|)v;K_5mO09opezyvdeIttQ9jw~1>M`3 z?kITHJ9LWe!IfLtQShwyrxS(e?jIfH3{XCIl(wL3brc-2cSV7J#QOdPXDd5rnj2r* ztz%H^2V23WVt@kM zfpSzeTRG?-7(++79+b|GQte-;;f^u~lzd0|8pa0ak^_gU7{v{f?KFO0m^}n@((E3R_Mt-&~PfngA8Yb zf?KG(2?}yTrB-#r36)0ITINcZm1CX3Q^#XSd)Xyh}|vZp`hRvD%XL6<71Sdt%ab}b=q2DE7aCQ zwqiyDlqOEp2ev{{J4Jy%VlQ*+C&q)m|HK)FN~42KhBrtrE&>HNqXaoW56U%8>#x}g zwf?THP|kmXGS`WMA`mJRRl`=~C|~JB;ZYWaqB2B*CSp%P&Nx@^hy^{3Bi2y{f`Z2) z^ekoNxOfot9!G^r)kDnud7u({U^H6bISxt(y;?9z3s5i+Uq6sS=NhgyE2fI2VF~n^A1eVTyB&a8@#h zJQTl!IYzNLwG^kO%%3Cbn0&}XoSvZIW)z!qxZ=!~d}c6*JQTl{IYzNLwH2qjnTuPc07k26Oa7~*@sc%LBUs2q4FvyKRceI z;lgIB;~5Lew~psYPzF1ms>j7+I~~tZP%<3P1E755c=mu&!}0VuJ|4q!cbMTqP`-sz zM5ycneXHOF&3C@(vnPeEDYc$&k(ddBfw2Fi5D^A0Gh9nZ0FV{o|RDF9`; z<9QmC){dvjiO{;^83@W@j^{B@7CN5V4dbyN;L<+q`(jY=)DtQv!v)D3j^}1jZg4pJ zK)KKH^lu!eJGUX{UQlK^o}W;0IGs+4$If#+8$g-rc!oBC8SZ%2fKuXk8k`)D9pQKi zK^f&tgyxb3Aog!E0E@b1f(bI-Xc-7!Ai$0t#;C z2->x`E>yS5@l#H5x zMmQM|g}opT{6Bmv3UiENbMUT*do6LXa27xmju?4}vz0kUu{lR8PE5{C$DUz0Px@wg(%F2JjD4AbBtnhPEeeAl27G!hC?3WoDB+YMzJ~d zRlgPr=O&24evyabKV^(X8RQr&B&w2jXI5@aQ4Fm3U46M)|R8t<3^oM zQ9;Cj&s+CHhuH=~6mIBoqncAxZDWhQ6R!++n1iT7jzW(cl|fN>_W`$>Cl5a}j9S1^ z=y9W3P}H#y5sZE~hU>Ur=y9W3Qq&}B37)KN8*63wF}H;tH>wpy;h6*e;4S#8PA4<+ z=y9W3Q`9ZsZyW?kd>f8Jj~ms7qH;Lmq(2_1fey0`g(%$6<3^o9QPCOR$Zes=jcQ9# z(HU;wDD=2d?I@~_Nhwxu?6JMW40myc=y9Xkr)cZQv&OsPS(+oHwi>>Q0U#k5kz?QPfCo`qR}% zZwfQ~grm^o_UkN)3XXE?2d{=F$U$32b~gP&4@8Bfm!8&Cj-LQ+p(B6B))`^c0FJ^Z zIzd~FN-?cWY6~j>M%@*A@a-_Fh@;TsMrBbHp0P|e@CP`|b`?jV$BoLSC|s53?J;?) zwU(D~6nfmKE);bHN0~N)wqE5Z^gxs~8eJ(0>pW)o&Ymt%P=lzCI0`*(Tiqxs7>yYR zG|mpAejxKZ6Hs(NIGRWi*8p~sEtK~ceITv+?xHDO!zI0`*(R8J?$9m6&pg&v5q zMxz%+)#uTevwN>~t{l!$=yBURo1%izaOcKkjzW(c)tjQC=f({jg&sHR9EyrQ$`5iB zdfa~Xp{S#6m=4h#@z9*+=C9Y-N;esaoZY1QNd`qNBK#P zLXR6Yn4+SO@@9@gj~g|FqN0!T?;M35H)?2#sJhu^S zHAkVxZEHA11*7rzp=VzaMh)U9^te$YD5@5~!!tzCRuM;`$BjCdqJp_mykq^Su&rx2 z3O#PrNGGc2bDw_^My=u~^gxs~8s|~eNjw_e@2EE{jQWtH(BrmsK1Bti@x=l2=Y>&! za};{qs0%3S5NHcut(z?vjibAmp2QNZq#Usik|aJISM^)zw#)mKKH9e-MPo0 z!)z~c6nfmY@+m61U)wnfJ#N$(ii+;n9*#nf8#R`qqK{XtuI4DC$Bi22L><4lbvZiB z)|#Wx15wuOEubiP`9w##Zms@@hEYWvg&w!9izq4>4Y#u0$5H5UqsCKIbY=UHqtN3< z6;f0%8g9itu$vhT^te$IC@Okxbm1uUK$JBaMHF>Bk4FEMvsa+QZ0B5KV}0u z%=R5ep~r2joT7r!a4TDl?&f%*$BmjqQPGv{6pliV8#S4tg3)j*c2AB%j~g|`iE`^< zF-M^XqO8%FDpA;n@8aLziVm~Q<0$mFZB3)7U^Lu%xSXTV<3?RfQPFkdMUFy`8+8dq zMIYr4I0`*(zot_Zjv@Bzx5_g+9>&-%k*-AMIJ#Jf< zQ&cb-Zaut}qtN3<&8Dd63h)F+p~sE7f}(=aaO>gw9EBb?>Pm`=9*uuE3O#ProD@;V z^)yErJrHG$;Z+nBjN!^x`+k59vz^6J=yBV+nxcX+bZ1m9N1?}!x`v{nXVff?LXR7D zEky-m=+3CSISM^))O8dUJ%;N!3Ox{IjmGs9)d{+fI~w+ChEo%QMJ!DB=R6Gb_y%_w_$g36#MS?O+rSu*@Ap}a1?ri(J+pi zDGHyXgj*0bjHA%wM&07H_3g;N-wpDE&meLXdfcd6ov5<6{`W!{HIt*z<3`=)M74e6 z1$g^Kkl}oeLXR7@z=?Wj?vo9}sJl4|J#N%OC#utFW1b459^okTxKXz|QIntiYHk?y z5=WuOjk<%Pf{~x~_Q&^zQJXjlJ#N&UPFpu*ZL>z>8;(Mc8@0%Zn)Y_ls<5p+9EBb? zYOxd5a`2D0g;59eHggp{Zq!{))YTnkK^KGLRhOgC<3`=>M2+b8VP+WBgrm^oMlEro zmOq1^u?pI1%TefosJ#49lg2h0gtPn}imDHP1>TO;@VwLmB63ER_suQplUp_(|Lj#X zrl6>xd>Z|`^W@yZN%@(b8|4ftxH!LfOy-cBz6FJuW#xI9nL}E%O!`0LXxS?}CWL~b z^8B%-xrI5Si;K$2bBoF|bNV*Q$jW4EPT#cN4BOf{r)TDf9>e=*4e!;n{~6uj|1&br z%{(`jlT$LOG=Fq1{8Urt&Mh-XWT6A}&YfGqKhRI6f(a$yEQO@T#5#{E@18rVEED$k z>4R4I_k?2TA^w|%zQv^zatmP$vWmtQ=G)e+!h*3y`FUA|g~g+LK_5$tatm=kWoBq> z>0X+jZ#y^{NOM&A(EQQm#igw>GY3(iNwah33~SGTtZtdZu_K9MR(78Z=sfHh;o7sZ zhGt}DWy61PZ(ebEroBJATOZihg7!i8iwh@}=O-9CXTg4Kb8LS3@PvKPD(@MQbkDib zd&&}NS>1-yIKz%%PDrq$bGDs%794JB+?BJt^*1>IW+=^DH)yyF6d2CUFD*`N3j33n zKPbPnfDU!y?yT$~0_9eg?lwFtD`}wBoDPNFr)bj(?OHr( z6wFG=E;AD*ixX=cVZtyOS~>pgZgj9|M(}Kc1(pS(MWwl9rdp3wJG(~jgz=|o+B-FgM})X|~N_RsE$fhEPI<+-r3Oh}jF2_?CuxXc`T zcDJ5jr^%Z?aZ+v}j$eWyr!TByQ)%%a;$Aorm_tbO4>BB5kk^7E%|75_dQhv>E*M-h zZ5h_Tywt$@XXEJ&JKVpx08d6tGzKh?!;$Ia8SKL(`E=k8SYY7M>fC5lxqZ^hg%ek1 z&qf*9a4wgn3FqJ9(YbI!N$2jL)w5^+tp3^5pS*nUI5^T2GP<~An%zjhQ5V6fG^?~U zcUor8%*B=0h=>BOxrO`RV8oLCK zRKOPLJ!Np!lA_nJ3}~Kp&Psv88elq{(w5aN3l1mFz|n>IxuvOE<*_c!PnRAJH8f7p z+>+eUaA}%~%e?_^e(B_t{YEfSopGkiIGWM@@yyqyxUjIGtf07P(74r$L#a66H zIe}T(Zbb-onrnq*7fJ4N4q~WAC6>KlXGQB?5Vzlj&jlpwXT?jO#oeFUXNCI|zroW= z^7FdjJ;c&nc!{$=#V-Ydi=T4rNAXh(UHp{Azxe6U3KYMnV7vI~{XWG{M^&i!B?+%U z@rx!@u=qtoJc?gLpkMJz5tz34Ma6m*zvw_N3TmfE@l!E&@l!iJi=T?CXz@z|NY+p9 z;upoOK=F$T_bGn;O3Di+z)QBg?8)Qyr}8C>=d$PS-jAB+0(8N1_xo47gt!WnIu&Wx zxrCiQMJ^$vLKQA5wgTlXBD{jNErQ@t*b<}ss#>zBv?WaideyUtC|>059*;`q2H0iH z-Q!uq+@OjUu&C(Bj(L|ZMXW&GQn6`^7CiYH4A0Z>sVO{JF7A_CQsKIl8iA!N%E8rZ zi0^&0C`Lj7i?Vpuu*gu~GL|G*Dp}+*u5Z zUta#yq4}ld`BTlqsr`7C;KK@Dz)HU`P_o-`!)dREGmV+IfOyq`X#$V46s z(rud*#l7mbddBlI2}Qr za3r5lK1DQrGc@9UPd$>SV(KzqN~W;E5*VH4xog_#8$4r9^HerHCvC-rN{w&U$b)xy z^vS1pS>%_F$sL_<-uV<>&(V8Wq8{Gc4}g7Pd8B#n%IuuKK1!c$8mXMC$sRmXf{z zr$v|woZ9A7f>RSJdPSRZcER|=8#U<~K9$d_3a3rG0@u5#lEHU*rFrj6*RV!;m0HV> z)wC-YOnMhy^t-0)LTyD;MWir~_qTNQzMe#}9dYTGv}qI{k#_Z2n8xmV{ljitUUbOPU&mNUr@dBT zI;HIlt35L-_P$7XpJKRfa2=TUMh-A}V z)9XacUf*?K>=juDRx-{3bJqd5JWh(1EA=`+WBPSqaJUXk_fx)ql7i`3% z(~MbUX|Lz4q|>egrl(#9-NSk9bw05CxDLAW`Jg*q7p7kaRy3^x3iDV8-M!ZVI^}#o z_|)eEL-so#u-A7T7<)z5ft5^(bpS4pbzr$tuLCruUk3(<>!7=ts;S;b3?|CacO9@B z&j)nK(w`5kq|>egrl(#9-72^aEI+OT_^1KAR~`?G*E+DGX&q3Q$2#cdy$;YR>wxg7 z*MTAXtpoP@t^;GQ$U3l+NwE&V<*^PdSL$_u#`NpJ;BXyu^H~SR?z;}yjq898S^9Ng zC7pI1Fg^7;fR`%#kw@!uJr!IVX&AU(A}#xIGbUB8w6Y=_^1t<>`Q9rqx@BusMjN1h zq+Y4fVg6ThDdK%sbaF&RR(Wy?t(O!lKS`uVHAoYgxWMaq2rkha3Y*U5H zm=o;#$})O9?aPZKjtW#Vm6+d!NRo!B7FN8LsU-HVm??~ZHFHBNRL-J9ed}35bVUkU zLTF+|vv*glq}h=bdNq-3R={`$cXYX^IZafssyVT8x@*5Th zkC*Jxf%HUAfK;|RCi9;6C303FgWbE#gDEUl** z6%V7&-$#c*?GN8F!S8BKyiKrQk@jc)!{-Rl9MbTa9DZ{}g$i@hSbBAAW2roQzF#&e z6)JSXKCdF37~@x`brhHC#2sm>b)wz3U`NLJ)$FKH|FRtwow{*LlyTsMsfX>3};GIKhxS?}(yb!Pw|3Of3#97+a8+U7R1p zw8=+U?TqY_|8Z74Sibvzw4-Qz@H*4G)lw~(RKZEk_1V^Y3O#Or!8ZVgugYLRv-us2 z=6eLwzGKCX#_mcxU z^)N}XgwrIhLArHprW=(-TgJR1YNBlkMhOb4ElamlowHp*pWrPr*}rxms6;2?+_SO0m#!Hib4@oKN!m|+Mo!*z z_%%Z2bZk3)=ADyH2s0;Q8^+gG(r5Ad&9G$c{GY~Ma!4qE!Aa51-#ubF62APkd%;xr ziV=K~JF0wGacN;*uL<~7xbStdnZ2{_!X*F$B)*8)z-EzK*VFYhfcfQ$8( z?eKecb%y57Wx}O`K_^}qw=gezf{p}@1>a-r$+q743hLF`XGlhT^C%V z8hF{AHq!)WNWw2jP8dKusnZB`omP}Ppm&9Ee5`6$s2<& zcXk>J7Pi$|_^oNFTMK<@n@dmS@eYGFR5EfFsE)6 zUTh}#!)_%W`sjKG6V^Q#{Pn?H0bzKo1DYBk#?0VL$!P)xB`14Y>Tq>@!W1yDdvR&_ zMd5nFgPFfk9KMCzS$z0iE_%ko$}`t({Kkh&`1J`GO_)#RxueSm6&FI`r%3v45^MgHVM86AHN2Bc;tbPJPhXN zQ}`%Y2>i*Agz1)SaFQYLw?*~`F|80DN#~dTpL$|5_O~lGV}JWn%u{WDk4O-|zkLYe z_cQ;X%Hk*WsYVnO(JvMxIjn)5PPfiiso*6jub9c>0vl4(tR6T4X}7u5i2VF3)L=Zv zy62>DkwG6O=TFr{?}J}0WU@-73HNR*fuME5d1h)ejc7c;5*5};Ym7> z#-C!UMDKEodN{s)CKZ+!c$H)2gew4;eR86JUpu1fAu}x46Zqi}^K}==Yhy4w^&+At z<|z(k*ac_)CmlD(WsQHBfqCOhG$86CEL`Sv(bAIs3p1sRzX~{-1Va{W&rEzJo8ca_ z7GaO00sq(b+~&g8dcwPW@_qW1XiU;0>td-zPT&78+M%9U&DgC#NAd?xDJa9sz_dpy z%IwjruuoBdq{k`BtXfO#Ti8~Qd^lefj6S1l@fe@JMcY+-W)@n5=^V3YNYWlg+f|#1 zeYB6Cg&2gtm^Ze9eN{oK_0&BcR9FDlYd(!C=l_o_r5@2-um1Fa-_Wu8ouoH%K4@Wn zT`i|a^ladtLCoovayR@Ip}af^ZXuZ8B*b~&xmDzDxOGOqJB2r6R5V=JQ}u_Jkg_j0 zcZ(1-1!jOj$(B9F%D=K#J`lc0t)P5TIs7CKoa4k4gyY>>8U<*qJ1ot#K6o)rCr$X# zMtrFp$>iHGfTRo4aAhV*Ao0-Sz!jABEiUR)JQ?4=IjTInv^Y1fWL$1pe*e0Dj_H!6!p=fW=+rE)pXz{0nQ+7}1m(?}Y8dX$*-_qd`1={U&js^FXVB`!?F z99Y>wbu`6K2-!)6&n_Jm2R6lTdO2R-_jKwYzsH&?&j0zQ3Z?s!&OtU4+V5R#LB$6UbX_HqxkgR(IsSz9U=3r3;F)BKAE(kW=9!%| zOVcYi^$&(6K)9o69)>0aLAKOG=WvByBaJ{s_BKcbo1Vzvfwz;TuU{> zjn!jXvk~U9If!W{u$5+-SsQ>cRXFKo<11)58JQQN_GypLw?p8a^zJ%_j&d;k2J)oB z+|oY9czW$xP&PU`KKOlLIHTe1-)y)MIUbrEJPuMFS6rBvB+AT4=X@#Wc}@-vO-^5| z5zrHo63^YCkAB+_Y*|GGWySEbjwJ=72jY+V6^#w954sk>??oqGD1@Wn{sJz&1kEiR z4gD_%I*f={7g49v|xNjsr!7)T;Bg-0 zjvAFBQ1=@Ti1eFo2{2_)A^o;+WcO+HB#xja!6oH6*g3q#1l>xS7t~*O{COdI1t(S5~-TGnf^v?h2(CeMNR z=izDT!OF6ASo-EQ7%a(9$Md0{I{1t8_AST+Y{D*^?Ce4~RqGTh)CowwGLsR86_k%F zo)k_&Pu!^7^3mh+^M=5S1G9D`%11i%@Pxaq_>-*WOdm`uT7JFY9#DBfE=~njal_5Up?RE`xbs|R zCuUS>0?sW2TcP3weP7{z_LYHj}?M>PU_bhsuJFP%BQ?x>RleWS`l%$p5NuX-L z-r=yr9SO%Q*r5+tuty&)bI*jYJrcT@urDDAyw}2Umr_juVxxzN`mjs`t(VH%P^9N=0K!_*{t!U2a|;J@}B* zuGI_}6Rt_jJ!8B>82JzhXNKK$5|e!pl30SH5nT4cJ+#sJWo7W1J9xB2^|3tSYv408 z@yd)YvV-U#h8~D@f%|0iOTq~!O}g%b`*m=2G9foFpD!Yl=jWNOQWM$mBnvJQl4lM%K^Ni6OtZ4!b-D(($Y{}`C5@=y2j=JI^(!iz zR-tC-+PFL)b1i`DoYZl_#Iyq82>HjUYn+rhnwzldGACt>*Og9cLd3-m-ET<|m2lbM z7K3Uz-R~~R15>3dczqvH=^(!=0~P0gRiHvsUlF)= znG?yb2BPh$t^^Vy(p?28JKX?~31H5GSxGJ<6N354up6B6L$C_q@d!=FgrDZ5)#G!q zkO1+!P)G<0YBAny3JVT=ZX$e28NJluMC|&*W#;h=IYl(R8gS7Se4XJ2hk2P78t&e7 zH9#dAK9$zH(o_Q-;9C-sMEcc*=wSci5FMYoLPW%*EfXnXQq_v6uyh3@I)*OU-RY6K zbVOnJ$!#LGm7h^shkNPE!f7-*}9ix%w+UW%l75NG$z#PKAP2j9*`FMr>nd8h$vjV@&ppPA={ zPv@h8A#HejL&69_+t%k$@o9$6Ea`=0kd_=$fRcKf#y%|!VsnUe1$tush#$4rEtQF#^DJ+zMOT$&n_ak-(Qy+^X4=3K8F`rR}k5SQESLkjFye~WtW^x(4ouvR@edAo9ix&tD-qZ#k zwwqK~mT$keO|?mLh-Xc=BK+Psysr>xGZg~(T}O@WTADkB?$syp(xX7I0*fcsIRz66 zIL|(~1r;LtQ%ng@CzG0j0mGLwNldts={*nDfr|Q2RRs}x5n;VkAAWKVdBkqJ2Wofn z+^qu4AH~7^y#SQC6)(q?j}+eEgyR;)8g9J#G*QBLTvCxq;x|Vcrh=IONx06GfO)Mx zoRu&kl347)jI{U-D9ue6PH#lwkV+ZGIiH*}oVp#Xm9DuHO5_c9dH`gl;yklH{{%@& z6>w);Qjg8l~e7?9l6h8GK#SFv|}eeD$#6%{)w7G6P7K}Aqe5m8ZopL6E+z4z{J68t{@ z=lSoG&CJd{bLPyMGiT16DVHVzy65b#@l;nYal;O)tSzaksW3b?cMZ}~72cZpMkIiW z`))%<4$PtRhEwoaw3b%=gytN?)Qf!7v~&KoCcGnnNB0TO@E?r1RiM zhHXHoLZ7>?a-qB&m6$j)$+*KkCwUUrjHmmC^D)>JMazdU8w!&1-BSyavhvesxl-N9 z(;#};sd!nV=EP;Ht@k;Ef(9MSt}Lps0qxvNpiM z2sTjVds*~=nsl>yCoXO=0_bWmsl2MtQ;seEq_-_$?@B$f;R#z=6dh4plVp50^t2mG6xQ=k92DXN^Zeu%G%VxF)mRp(} zE!bV+Ddz@I8;N%r!!a-4(2|&`b^%)urPT$K6ls(TH{$~^cPa2d-k)j%NbVQ&XlXpD zz{5y&RjseU)H>!eXG?<3<9}WO)im*fyf7`J2?Egg)w3pCd*8+4+dTGWi$S63Nw7O;+s2;9_S^;_qJ zuxRTV&ysxHtl-!NCYHv)!<*|_lIz92a5$hL@0+FxI8ImA;$SFWmLUA9IA>_FL)(sx zig!@4%2ed0l?WlF{-{Bfb4A$K929ms3SdX3-paFwF_?KlfW?5W3hYxhYfP<1>XlWr zjZ7QcCd7uCQ?X=8_7X$QtY{k{x-HILRts~UD;zQks0H;9u)A8Z)!jurxQALDMaQ69 zxy$4YbD`pZokfF1dW^Dr-wnUA53jy!38HjkFO?OTuAYT3076AfnqQog)T|b&vBo_g zPCe2Y<5r+nB^T5QT*|&tcOfo*LvbxGMCLH|*(kVKqq^$l)kOCsq=(dd&BpX7X%XgB0gLVO4WI zv~=6%fMwt}3Yr@% z=?65U5$8|*1nm3vViuQ^l#=hxOH0aex$|e{zyU$HD!ty~+FYC%FY{{d7)MbOy5E?O zPMqV|Zw=h^PC}s$8_BGX6kXz!MOK>%s6p+Z2gr!D@`J&pK^xFPtkeUzHcg-ynkYFC zsC+IFNLeWSj9+s*g=RXNb6Z)?j>exq0(g&f`n^@QU#pPwTC^?yb%TaOr&po+Q`dBt z)KpcdgP*%XT)=?JYSR?GztcE_iHVV&sJgATnp2K>W=*Wgy$3^`j}!14%jA<^A>xtW z7iC=>?b?%Y#HX)Q{9CSBlrjb==W=<(%>dceKqJ1KCwna}r%^z7UyC zo=>N&!ER*@h$Fa7t%1-$s@Z0-Zro7V&L)SgE7g$>#Wf;c{$+85F{s>54pnCafwsXq z=cb*k4iJGos}7lYO30iIc)Ttk7WrK__97i<&#Q9@G7|&res#t{rWJKAb`g@sS58-% zi56Z~MrLD)6B<&~JW?8+cj{1*Xyv!lJteseREEy0pv$Qk`hkaPoMN{erkyMYk%z|+ zE61LZ4wfF`1YdI%z?u|i>a8tFv#n}j7IF3fhHWr&493Iriy&u8oWaV9l&7s$CZug1 z&6W$0O*0mi*|GnK!KJi;#c9B!QE0F>VGUUOD)kZ(!sJktDNhf0dSvuan$Y^qii~a# zcJYB_j`KwnNwfGs6Fo71wBdH^=80VC7S9oxe%tw>tj3snn<Vr2P}!x%nyX6xw%;?btXe?Ww6v z9D`(ct+%MIrp&j*&6|?pZmn8S=1m+SxwRaw+G_b{IxgU%wLbZ0UTK}LxN31Fe!5fY z>v`u-ny0e3+*=cmG;e9C_|ac}%ctppig>job#&ta1=R`e#wLlyaNm~HRbpM**FrS? zV?axrAc}1(L~$nW@D_sBbEhR}EV-9k*3oN6g9D^9f(mzh%rj)ONOUNnust(~R=CBn|YiiA8x z4Iova;Iiaaizy2%Ss~G8=9q!=pmPnQ@GE1(toHk3YwE~@)Yla4ZHBMup_S*O0hCQ2XmYfKtJj*%a-amOBMkL*LS)H-meFL%lNO>fbIG2yPL&Hu zDx45ma;arBS#qg`sLWgnlG$QK2nKPG7O}lBnK4=NsfAQoGODGx%$y36;pY0aT%gRD zEIHLesw_FxQd}lZh3>HO=TYc5m^(V}QxRRNTw~sPb$Z~9}WihtZ z!Wi3XX^d^PIL5YG9%EZAkg=_n$k)0s8efMrvgHbHJpxB5P?7E*0bbn7u&Q>=eeRM12_ zFt?@ntf|w#b7}_mwD}KNmh(cspUI~6TY)k#jWgSx#t=~krg2u=(-=csW)nOsx41&rKTPG+gL&RxArShJ!w(8m~#20|N5L?8Se+qRW;tN1s zh%FJ2x)AYMQ>W}Iq#cJTbT=vP?xagQZS=PS&hI#x#%FoO8`$Z{nvEV;^0Yw_)^)JF zwbr%@me7tH)OqAG?XR<~ttI-SO$_tJH<983WEm!;?@#;z}9;(MF=|z_ImG;Zs z%5to0W6-3wB^aO_q|g8tG&XC>l#wdEQe0hcjSidb%zzH`nL$IrX-%c|O~clB(e~Eh z!CXpgqgkyHwte~kWbKXTIP81K(W$$+bnBX%uQ;~lxEauk>2mVWm_Iw0SD2(_7ZJ{uM z%&+x{JM?XNZVetpn>)$5HPWL)!#~Lda~u5gJg}l5AP4*|V-BVz{4%wjO!%Qbn)Fz6 z$M4o_TN3;rTgeAMd~IIx(XX+U6x#V`+Oob@6+Y}!_x;KVwtcpSwd z&2^-`Jo*I|-sfpanjNGSMr|%p?5#I=-|Tmo>nAJLxws^g^N6SlR2px3)OmTtttF;I zh5=r?=4Xbr0EspIA-~Pdau27~Zdd0j^`{*XdahV)19e8>-%-VtE+Mhjk}ILpV#$>j zpz-61`PD_1Q)t@!qFW*t8(*wzW(8<+Ly}PI?~pd!gl!>-_Rvg%zL9}hc3kpVN8O#q zPCe5xi)A$fmE+eZ!9bf*oOTg8X7R5)G(|-VE@-u2dCM^QQ>4~f^(1On!#eqsEuCW| zH!?>;M;D+OTY%6k)mjsqkOk4gmO0GqY@2(8{93zB(3)wrYAbQd!l~Js9(r8+{aMx&tb z#ZU-oArb>2R>p!%h?URS@9>X8OUv;X$Z@DrNaVB}kAWORtwK4l?kqGRVlt3qs9A`J zgu$#dS!*yEND9a$ojDYo09n<`8i|3BfHktl5h7cxkr)UG$PwE!#Gwn06Dk8y0lDLZ zDMTJQp)wF<;FRIWAhwK}PZ}zc8)PO!L5A7~TTqah3&0!@pUV}VCcPUy!S&3tJQ20aNyNB_K}+=Gv5N%|_0 zL2TL^nh!we9l=U3=F=3dz~)a{EB4P@v#@mtoe2zat8HKcLr3UL zV2HbI0}~iJLJI<0v1{Ij!q#C7Kw{{PVlWSc8g0!cd{jCBiJ>=3AQD5zXhEW~CB3B^ z@C|AP>uz55Q-_YtfwZ=1T!pmIu{n?ydJ|YRszO@m*!)RT7T3s)hvsOLefNeoZrcL< zD`2_3)^-H6gl@&AdqY(%k^cjv_%r3`Y&y5r)JLr>|7t-%Tfe{E&}6N|XhmYnHlthf zHl?b?*!)TRKiW!eU9jNQ@&&M|IuCI0j1%erpBK&ZMl(J7%+MT zXfF}}NV!M1x;Elx;e~0-%G#9bU)7_ybKFj@4ZGfL2Q(95He;D)2aA;leFbS@PQUEn zw^LnKJ`QkZblM!jdc(Q7%7i+IJjP-|-rwzCYD-WUh_Kob5aiZwg{v(>VI;z0=d)j3 zu`sIJYNM{68W5os0`87h$aaP`qqW&iY}y*F!yPDtp#W{yqIvJNT2F%>(YBjbBRQ?ujqE2FXh`!G(NK0u8wk@HLfxDya0P4!J9s_%HrXz0u76u0 z)e}nU%*@kZHv5`sYXu$yITp>L?CSL^(g}9L1ovpafoN26q9h(*ZUrYXpM0qFlylEY zOq3s|B)VfJWhdrLbfu?eWM(BM)z;$fpa~<3Cd5yOD_#^kV)W<I)IL4wNx=VaQ|D+^^7Q=w1qhZv9P0Nr{uP(z7Q`N=`C?W_qd(&}b{2%GWU=ZDL|hYVwrKN ztT)7iIJ*b2Nr@9;k`i6i2duM>u#$e63|+U-D9|OUh5M!H%XNIH5~b`^6gW+6P#$Vj z*yPhQLdhgBqMn+*Fq_-5l*`q&httZphf$dl2t?1LP+)Ct_|h}Z21Fy@20*3V@i|y& z^IYL0Aap(3IK;_J_J6KX=l@J4%j}m{UF2CL zcA6y0_>~@@f1(v_m4jtp4=xBX2)=Q!rKZ5C2Tl0o$67glkJQT9JkeLn4kTVyNg+%t zwRQ<1lTwWkvdGm7Ifqv5kh7wFOnY{fUL-`o^iZjkUoN#}Oc_MFMxaebkYQmjs^hlY zYb`-Ek}MyqggHFblNS;gcP_s^1N&NjV5ZFgFM5myEGPvhtjuDW1BOQ$c0;mSV~bRM zO)Vaya7W`&rotLVBggu=N|)1PJ%LVepwvb~D)OsAsCJ;isFdqsR@VYXtBdt>wJuJN z^>uNA8v#{S5sKqNsUmgJQ1dD^3pJly2?tDl~$4W4rQ-_Te?Y zqW3KadCx3MWg8* z1)MK_OmS@CXnrAy_+1niUpzX-qdqS#qK{fme2KuQJ}()=3EFQNz(mgozuzOq#*`En zD)~ml6d8VxE*V`yALV&bj1j&>c^+}r$e3vTCpLa;-00Z&QL!WSsnOA~F)^b?jY2qT z#OS!u^lV;4M%cu#fAwvj_d%z2(!K2^{tPd!@fP_OdBrbDdKr-p@yahbjEIzm7kdlq z=J(H2p3J^cl3oK`zjsB-We5_b$YdEVUxB+65%*T*mk1fIrWoD@Ej=CdeB}q1m^j=B zCWRx*&`-2{6ibw1HV!x8>wxqTX1K_hL^E6%;KumDMOwm*wSx0`>wQFo{CVqGNlE}* zr*B2Vas<&*&b;9S*S}r?lQIzN|Ggwt<4Yf^mkP%z;@?CNxDha&eiXkW2`&=&Ozm+E z;O+)Y!cPLOBZ9<8w10NxJBO zfa;9EioRH+ZvxD(G8~DiReiT2z2~oz^bNlBv7;{z&rUojNmKBpj}yK!z?}1&fV0Eb z8;`4G7y)TbABoDPfSY~D86UO#Y8l1}-+ny27I2sS?u>5<9zPA3*gpgu%aw(^#GpNv z0p^iE1>7+RtlER{bvcZ>;7cDTd|Lt2;co%wgl{fjK9=F^@TG#jfkz~1frJP?PWWB{ z%=jccopyoo4Qd}I-G(oHobdewnAnbi@ihUaLnmi^rZ-v0Gq#Wq`S@dtiKj0>*c& zGrkdcya_OeA_L>gjS7?A#Mi05gs)GJFe$sIGrn_x*PYlq)f`j7NMJYf1AC*bV#)o8#K$S{cV#|j^@?Fzu%bbMfZ@5nHL z@O3;POzM4NV0@Egm_Yb00^I780^{2#!#Lq1G5!s3?N1JjZ=?(p2wyqi>Q4!b?|vD^ z2_JRuF95gaRA+o=0ZE^}VbWxL>0>7^)V^~8QyCo?->raoSBA60M~}b4zxJmG#y1i$ z#WI`|zIwo1-!Cw}Hvsdy3}=Urnyg#@FzL)Q0^>UuFso!ZJA4pj>1Mz@IUq2;Zvk`s zKmq53ZwO#g1_j1f2beo$I6Hi#R-OjTTW31s8wDBp8!#gVJJUzJ;xc} z1i0A}U{4bI9QB79ANc|!+hg^$Mb!+;4-3XCrSFiUiBcK99u%u~sM z@$CW3pcDG_k?QPX1hYwgxaC>fo&Kk-qQj3X}Rw42&-mFjwi|?C@;@ z%qNqa@m&J?BGSU7EAXX{oqi#;aw}lArU%B?X>ypf5??2L#EzQ)vvW#dd_6M4q-*dE zgzsL!?8^*{@6@a?=~jH5@Fn8$IJ^2%dwc?z?H*_P2w(TYFlh|F^s&R&3y(7ZGp{HxzN-MUUWT*77YQ_50JF0= zFuoq%FlijVPV^DJ9Kg&g35@S5z^s?y?C9$XG+O|(eSTnk-Alnge4Xecd>Me5Q5G2A zD!@E0!`aan4m6tqv*kQzeAM6CEeMmQ;Oj&m;d29KetBSgHvr~K8P1Nr6M*I*V7gZZ z#+L|~Mj6ft-#WlNQ56{9H-L$$7I04ZQUNo2VPJf#0rRm8XNQma$6ml3sR@iPwl+*U zA77{TAbhI#Jr@VY*QY_iIN=)#kUYR$yv!M2E|5F|nD&TvKqMcp1hC-%dO%0NluR&iJUl^JN$( zeAK=d1Fq<1XM7~5YXS4uEds7P@>$7CG!$9mtP{iwxt`z8!$(Bf$Od34zaU{zmw^J}F?F@bv;n3gD(c6&PQm3=;_7M!;=- zIxxOY&jh9~93bZa&h@M_zQK6B7%;azC*UGMq?J4$z~iL#=x@&l#y1}@SH2J!U+l&( z>5P{G^&@=gLw*&j_D#g&PVZs=!TW*n)dQyQ z2Z8Z<0dv>Z!1z7}%taqM;~R&^n+WFP!1&?-vrUGxtM3?~>H7)#?>1+AH2yXMX4L-# zoD;qa0rU8$f$@C}n5(x3#ETMhbB0P~&<=VT9^_Ia4JVy9NF)p`KodlN7- zzYuVC_6e+l1K8HNGz z&kA2S&~*D1`u?CZKC=HN$uLg%_Tix$a8rH@jBlw7_X@3UBmnXwG;X8zf3jkMiI557oGK>>Gn(zMyaJT&x7~cmn zOdx!F0r&aef$>Eh5im~pXg+f$;7()@y1hI{18xdn7RYcgYc1uO@Ldd;sxX4k;j67T z?9e8Ca+?gpfb_3jj5M6Vv<=WRkbEED!rBRZv|k(hxc&BBKZx`*0rQ~@H-z9Ku`k@T z-}_voFYh35A<7>sI5(brW((K9M$RhrLgbu|?WC#r(ue*h(*AKnZLx0ZDz%5c;& zfZHhO)9{hqdNp9~Fv7|8(BMdq{Rc2l%5ZAATwe|DWWc=vn6HC?`vWk?Vb4E(RD7m- zoQh|I0h1=fIn^Td`0nt7^OsYCyC+Dv2ZDtAZ;)`01qt_5kZ{ih3HL&f za4!c5_gau}Zw3kXt_56lbo5yhlhQNNCuXMSWhUjPq$Qm0&df`3Pjls-6FWL4=5&ka z>G`hQr2On$cd9G7V3Iq-HO-ZAPMif~Ze67hXTvhe3Tr$yOU}tmEq13asq|Eo6{XVg z8RSTHO-w4t$j?YmPB^`yc2QAvjj!00oS8Q*B{x6Sl$xE9nw6C4$~!%pM2${xJcsX6 zDJ%+sl#(!8-1RV9T=g(JxvbJtQ|7Im?W*_Hcxq?od27l%(DER?%QaQ{lE2^ogtt#jvSdjOp<)1WwlZy5=eV|*aM!4s+#g*=+tZ? z>Sufh$r&ji+O7v;Qn{qA=@TtU4gC2}7A(wn7kUJ|UIW-3Ne5UDfi2JJO9hc=^U;haq;K6%61zpr;E>jy&U1(YR zPkjFuunm+_S?ma{@=;hJNs$n{2q__IGsNyVJSGv`uNT3dvIr)^swe>`vOE=D=@cY( z1vDjA*Ld?5d#Z^`&_3SmIv+Y_m#Do!LPgeiYwOB=(s4-Iha?YLuaIwup$u^lsIgIB z$z)xEXFB;Vm6Iu;dQ+Q6AU<18KND?Dyudb&hAR;wcf+j+QEJ1z2;&ewgm47HClTVf zL&Hl5F|BGK6a8$2#77*f@arGHBb}&M7-g23+wm+z-`=`cNh@5RSW{Jz>8+@$S>h}` zNvZVC;#@s88|euNqbf%SKx?*1j;MabyB+v`8nhf~<+nznj+Z5>8tqxZ{7J4WDS?*m zE=!dUL_wHB6{A;>jXsJPk={t-6!DMhOfp3Mew>`1jJ78}q##_2(1q|$gp&~d41^gcHNNvr`$uU7H}`5)o1!#h<-%9a-H}o6)C-v_*p6^Qb2Vv_sJZPLG_!85WK}0 zA~k?_Qa-}@2n!IFA)JP=0wJbm4fP0Ndp9&9oP&^fgQ=4rzb{0+Z)&IUI|m(f0(z*z z?;-FtLcaeDIUs8FwxT2?)#hl7iK8ilT?-lJ?ang8w9Mo1fsjD)A z5b*yOe@01BQHM|+GCz(J2FM9WQsk$XNpVL-9RM(O*5jlyskhW#t^eytyNI}e@dXG- z@1N3>zzP?Y8US&qTe_FwFbR%|+6BOSqGiBTIT!Wa|UxJ zA_v=|=+gt4wj$I19+auJ)Kl$67!|c0X+LXeT(-X4BIK35@>DL3mZZLplPbN7Y1Csv z&E*b027`+bp6kh;CUF^eDT$mzVPJ#&GI8G}3{?TXp>w^cEpAT?kytLuwfVJ@Pz`JnaMJS&ZtGiafoM=RxE_W~EW_(r!leFp^Wamb&8g z4NHc=I|2>K#tgvgWrMmz4$_Vn;#*a`L?Y(RL(&F_J4DFmslh!(p32&is+tN*F&F|$ zcR@GdLzJc>uLY%PNS^FO>7&S>D)bLgdgw2IO7|npM5z=CrDsA4M?+}wIUPm33v^@z zp?lY+R@LEs?>V@@fiHPe1#%}~j&R2*W{4E-@mrAk8>iM3CUZ~Sj+C)|2p1Y6sT$2g zeEb%ve=;0YZ!IQ|xK~j{{fRzHGG!rUvQ>vVNoWlfNi8OQ<=zy7#u$MLY$CIfY+LkP z0L%0i`E`*v0R16gsk3bY>_Miks=U}za4Ey^E`*zrZ&WEM7RX5>(3i&3D;Z3ZrbCqI z_xtkiSd5qSyCcMeKEveSPl~=O4VK|=7M)7{eYOxOX}J9SUHSJbP!ELf8F{Qyo*$8a z({r}6e@0;s>+A;_BWXOp8tHe+>4g}FY5Xikn2FGf@LYst2rosr03jI)7|R>(M_7gM zMTFG|KSj6@A?fQ{ga;5p|21?+MHeBQgm5v!41`M&)*-wY;S~rQ@OLA^We9IWh_V`9 zM|e5Hj}bN^q}8ld2qPi2O$f&zY(_{b7j_#nb0g#SS}8R0_+^AP?Q;cSGDAY6d(QG|;TK8A2P!p9N*3nAt&4L2fu z8sQ5FpFv2<{5gc5AzY7e55ngW9zgg4!ecr}(u)ZDAbbhoaD*=-OhUK`VLrlF5za^W z8p87tZbsOQ@O6Z@B776!V+h|u_$tD;5pF~H4#Is1w;()%@I8b*AfOQHhBFX;fN%`L z4-rm6_z}Ws2tP*XMfeFqA41sJ4a*U3M|cmy&k#O{@C$_RA^ZyAX9#yAJcRITgq@+T zzd=YN#vX+I5PpX+4&e_7M%rgs|Zoo(X75aAJo*CXr_27Vyyif}VR$aKT!2%`{^uJ4KPZ-l)N z4oAo9jc_tT%wro05T1Z=A;J?8UWTv_!fOzojBqo;K?n~bJQLv|gcw5_jy*<_&O+D= zVI0D95RO1N9pOlX3lWY&*o1Hl!eL5H3ZSiSR*$*$AIPI2GZm2=frWk1!wM zA%q18NyE-W*a?dBT!cdrx)G8h^&m_@Scq^Q!V-jDgrx}QBP>Js6ZFUxlgQW8IqL5r z_#vfaXXWL)C#7fRB&FoLQ?fI2vJ0|O-FazAIWFl;84Ty24Pg1X>2PtT2`G0?Qf|J~ zUj}XG1PU9nbJUloP`Np2Gu;z2vXkxca4HZmOq8QEKg;o zr*;8`W@9=`(6UMxoBZ%Jl-cesQA?Myp&v5 zz8}!Z06KIgl?@=#G|5RRQ`|WjNm(vTlEqW5fq0sdosp5A>XHFYkpZ|20WdK)J1bv) zOjLG>BP!9(Nm-LXB#VPPCpUY>%>0=UjKMNUXNfA2o|4XFOmoc;ka=!qzMF2DW^xE! zxFoKf_CrQ3NB|L1N>WZC(1WCp$Z&w^MKCEz)8twi zXdNcwIZn#MCC#o>x5@#%ysK5#1+7}39lM%V>UT^1LSfBQJ!+L3&|@uIjOvCexZuMAGe#T(y44b&7RKn7+uU;{nvw8mQ1GlOyI-I))BLravGrg+9MV zt*fl%W{yS?T;D!`?HrGh6E_>?r_(*|DdnEp+N7Eq&k`vW55LnR68~MhH2iK!m3(tCQx(U)mC}O@FVK%hP)HYJ@ad&6M*&_zg%D( zrefhyNBD`a2Gxhg2#?x5Oos%Vs4D_bDvLomwd$q%r}DBBSBtoFZeL_o#6!<^OpzxT5jaug3RJ7p6|sHGspqa{oSPfQoXfB7!jb`4XleBgQczTs1kwLe-y~^ z*3{ySj^0XNrl+#31U?LzY1BQsz&gaJQ(ji=tZXAhWqfSUNBmrL&P45THauQF+Du0CW_KCJk^M)E_ ze>h6nZIhvd23He&B;f18N-n^iRaVYp%J&L}QZ(W?&Nm*uz3`~^@aR-xaTvZnw~vR8 z^VQ7BRaND(?$y zY`z_x6>^EEi1r_ZM|t(#s2avZj;9PAsi@S;Bz?`J0`)q%r>T96bp1ko|JDzq{_>uw z2i3+%YzSFYnpaootMPhOeL#Bq#z0DOWDG0MBe4OLXIw0+r~B9*BGZQrcdq*kJ#P%J zx|c?Sgb}un6A~0?^9}0Ufi^MI^zV=(2C_^(GC*!bXm4`U3rmp9saKB|PvrN%2yT+Z zS7S||Y{-<;2q3w@omWOErXip8{2Qz) zm1LG2X5=YG70OcB-^KY zTEcA-4AQ7H2N82fW zEEDsKH7|7hWiF7(H%6}pjDp}lyA;Ej53Yh*Y=d;u9rf6r6dv^g(-qh%jvK)Oak{nj zQ%k-ACM*g#XPwLqUnO2F!6Nvt_yE<98_hGPcHDt<(>vjiVAIev?bceBtdSyanKZ+U zj!Z;FP)Wr`pH6h8dP_Xm|E0ba$@PHJ);T zL8v;a(QqhMG4*1nKw6m>dxVQhmuNEymXovXny92~eq9aE6&Wr%ke-ITl4|)A;;pu$ zj`hmqoVzj@$DAjVd^gu4Wl4D%TnsgWe$pIk1YsESl01clnH3W0A=-MtW`xgEZfxt~2`8yjTeMz!44YQk!4BZT~r^-&%&!Xcbd7eIDq{fDawJls6 zrmjSdPZR1c+)D#1gE8C&C4q*O5wUDtzSLXS26{b(F?&2u6F#?Adho(eEl9#T!7R9p z$$_H|0^LAt0tOSeyCN2oPV#8<#n1Bc;<81s(`g*|fQNXsv#MQ)$Nxw+5K_x(t35uL zXS|~YOBCRM#e;+d1&}))jf<<<(j(@2i)CZZXz!79JP#YeXpxC-NgkqdPz#+-jzqx` z9{WG$Zm;=Bg|x^Mv15^~2>p-L3oogVA#=IhUG;CeW5K_V4K8N|rgnU?(3-6^yG~CS z^&R&Zs^+OZB&n{_TVIVgX?Tm(=^9&wf9lOX)dNC)OY9F1k9y1YaY6!=Oa=Kk5tRAL z7J1<@@XUw#HWK-sv*|EOuQtvqnNnibJF4BPv6zj_dl{eTz+yNcdy@SscUnFom#-O| z8k5I>dEAPM%z$L0{+L!(UWe^j@oDD%)=5)%|r?H!6MBE-Ub=$#4wB9Ab zHpVrKTc1oOziuu@-TMr=C#Wk)SbfS*O3CNGe-&de_C0o#lN4M7rJaI_O9}k4>CmjS zLctD=HJr<$%Rm-LLsGwenr+3*Dw^fz`7joM zX#G$*i@Vc#Y_6qYsPV?>x)V)Bast_b@$t;($8~0iHVC^}r@JbueM>}Q5>Sq_uV%ph z6FZ*!A*nD(LIq9@`N*L{j_(>ahYnixP!=UJIlBYwWm(CP9zgwjGh^H7_K);I28_Zv;Jy~PTYI{tJ0N&YWoUwdv96e;wnr#yqk zdMH;YWD=#XP4W-csD+RQ$(9&k^*i)EJjwbnUTKUzLrd-sudRph=sh|m*R_ZX)LYj=!CM3}El|1D9> z$?y<)eLMocp*ZB>c1VNWBZhZ!NEmYH9VVRbe%TD9*`eCGnfqILZl2C(cvEXUi+SL@ z+mwi@9i2?3=VZm!vh`TNKzaJjDq`YBHtVb01WA?i>(I=suee^zdr}K<$4sxNhBFNM zn|f}OoeEJ`z!VR}cy6@e%x}Y}sk0}jZwu-ybR1l*>gF0&(86Uf9tVHm_(V(SCdWIB zeV4h-TA5%m_)3e>!e}!3IgJ{ztg5iCgt@bkHM`=o=bR~}WjF^+j`x8qh(=oiv@S8zfzhJITT)bo^X|Nwf3Lx*GuvsOvyl2f^xH>=U8LAw z!c%c;=w!_O=HuWD_S~`OjE;>h^0>><8_%8b8K@tfS)uyvM4#5}FCc9^iaiL1QGu+~?^x#a$;2hBP+^Bdt*4wF z7UUfkD~J~KVc2GGuBJ%F^J>Xt>;9tJgSsA1R&X41Qnu3sMlu(48lA-9pua|C@A6wb z)MzANtRyAK2GvQ-B}>ZvRr7dmR@yhGy2AC=Y@yiVDYnyzbt2k9LQWTL+$-Tel0|ll zM|Mb(oQ<(&h+=Qk5(vu*S#%k8?jcfky8V>$Y>Orcw_Dm4tklV7`l6Rjm3Y!3=Jq$U zew|o`?SdLBdCV?Sbc#?wjFn8oubkwcX2!Hll}4XS?0u~2YN*(qHO8*$s!Ecbt75bu z&Yr60tg*S&#ZA(&q`)5LUT7%|TGu4+!FcYLzhekfB|)$C{Y6LZ=&N|%t8Pisi7>56 z@8Qwak^sNP72SMl4AbDSUrlbqc%Z*uurDC6y1k9W?b)C+sTmoZp zo^eB33aGeM)YH7St?hl*8i;h1PB+WlfR-Dcw3Bn8Z-k&9XBd`9&(P*h;>0ey_EyF) z8Ccix#3loibP8=i3iczO6j`>ny!0&e$aAX40Rsb1r+$$wPyPC$-=Y}l&J1hAN37?n zVwsN-#&R%W%O~BBCEUqr;F`*6p`a2g3p6C?R0EkzJ7M#xJ0Y~eoBG-Z%uJ(+%kDB| z@j)}_$$sn3%ESWPr=RLkMuAfh|lPo+Nd@B78A$w zlxUpw7^PL3+Pf)W#~91>KVevqRvkWUt4$B&1&I~Qic12P6~p7%JZpaF=fSF&l(X$> zabFIL$s#sW^yUKZSRoJHX{=fOmiXimkc_tFM#ZS{jZDRDY|;4}0CbT6J^zu1cs6t6 z_`gmL$uzheyfAIJ<>}GA)OpO}Ao4r%qI zIbxlp>?>iL|A=sT>cw~l54r2vicrjZp--r@_v3U;71CIhhgmdEcNdr842hQ~)7J=% z?ypOYU5Q(r%!3uIHjRCcRz9%HpC_cs)LAFxN`M)oi=d9vpshJBd4 z*r97Yn)&QC%w=RdpSaaeU5Dhk%@696qp+IsED?uh{mf7yXG*>am1XWJrA(P9tMt@){cY-&}Ck_ ziJhn@+oNw=J%M|;vaGhsS5sA8Rx}ar9a(ew_vmr5-bQ-q3UtAkhi#BQBG?55)-G&vMLBHE3pN`$ep zM(4a(&R)addi#S2XPtz9z+~?C|w}qaho;ntL`DlIi4z+?m-7NwRpL>+tz?mE_?iyY(D4Lo7!#O+A-XiRH50 ztmJ5hzlaygRE}#FA^8-46y4OjuntEsaUn96D(lK|Oj|w5E||_bz8ywqMHj0ptFl5S zm%z97D|yr&uv3If;~X(#Qnqm_wDY=IgdGlfA}c%;56YDI?**30A@9gd%q|+8y~UQc z8+Er*mQR0UfQJ#`MAZo|=AdFcrRLad*Yv#iMflEDDXOuveOT!4WK-0#W%V7K)W;WW z*|E)s?J@afMGMrq6WMlY5O(=I4W?#gbe@Kk;Wi5&8!J;*OC;uW>xWj;EXd3vudtO# z%zv@>N@yC2#*AZtMzJlG{ki0Yij2|e8oh2;)UR@Af;pB<1aU>)-~Dmcs*3hC(?1=$WcA6@ zJO0l1Rw2Dt#1&h%)XutY=&>~qJoon-E=h_8qR6m?TYto*s>kI`{Jv(T@5P8ExaWq` zzqo7X@a|1>lB>r(^!~l+)lcD`C{AB@!rZ&BJ#N6af4uUt=d!R)S-2ax9pTw?`_v6R zdOrST)w)xM4!nQYjkr&Y(_ie{c}vB_tNy&{%&FlKcfX4ThOL}_;>HIaynFP+BOd?! z;vRQpjECtqtUciwcUyV4#U0YiH|+YR%gd`KLfKVt`bm}L&-^z0vcH!7t76n;pWb#S z?#trzsj**wwY>0*rStBcyzb+s|1FfHQ#ufy9tUdwo?d?5vh&GAz~j*FW2N|#Md#gD8s~*SRcf-?b z%Fpd|?U3wSE_fREKy@ViV}3vWqj}?+Z@7MZNkRAN@4kt9)HuDgd+F^1-yHV#6>na+ z>h`P7NWi^coc>4e@T(SXeX>3wGVjHxpXWV^S8kxqBEv?k+5O1auV;)pe)ols#HV}i z!7>%6m+v0&*^$oY{q@B6&(wCj=nD*94|96{olOtid5QbNvQ>>=%o-ngC+^ka^w~qN z?0RtQd;NQ-?i;&5;W97opXyBb-)tXqMM+}3%@4qt!{_ARHMc*SpbJw7X;>%z~wuYc>mUp<3+uEGh=tN9HJPrW5>>**gIe0WB6 zDdb@pr&pE_e)R0#_5U6^&w{yx5t(|sF-&G&Hhx^btee$S_uHJC}fyrreGTP-{_s2tc9eo$V zGc#-9tb>2Ao-+813(|J%oc9iHTjliFQxDDASboVn4@~`O%W(G zy8`#)aeD2&TP94JJY?sjpZBgkrrZ7hf^z6i@Haiu=a}Zbf1Y)J)tcY-zV~#ABo%Rb z{jwVmrG5MEsfQjLv{IVfDFgTKaeDdo7khX{zPWE}yPT;rKU%sM_r7tu>z2EI?f>KM znbW5w{pX_5zd@cS9ZUGHFNyj6KcC(B{GfZcue*KG!{~QSoc`9#`Y&I9dC}tO`?KEf zU;OeVhcmgM6e zKu(|Z*F*73|GMS59nWW^_S*V#1MZ3A^gd7KZA_Uz`r+ccA79e%)%_!JUs)96S#$d8 zZ&t@#Atm3tuJ43c=)Dg(eanP(*S!9t>zqfg{?AvB&AWRb?u~^H($mx5hN8Xq4_nclEBIf=(q9Pf3^Yss-Po2_Wu8ir+AkWwy4m^EUmff=bp8fY<{ruvyW^YOSH|}8P^bfzP&iLYv zEB3wKbI(Z^ZMb?pUQ5jBy^wcnrzFv>@UJ@-WFWoKX7{f;kA&B*C8@S?4_2a?n8 zIP!jDP8s~pLzn!qt@nwNw2#x@y!DBP7LFWo>&UzI z=Z#M6HWzqcwMT}1(&wqK$_k%YvrC#?z5SZ=58*Y1oId2;D?gle+PwMK{}HkL)uL}7 z!G)Z_6&V)wL&truZoT$|mB(Lx+OjDRK*y(Y`e_}8t*SWdoqK2IOt0Me-;D*(Kb)Sn zcGSv#^V>Hs-|9a6W|!BYBmd;|yfOQCEG%D_*xP&RX{V1`f%?)0%*ZfbkH`CD<$kg4 z+=0#K{#DWy+L9=7|#Ns_dY)05_9#D01H*M;9D&$(q!!t_h9zKi*D zWZ0x%^X_}&w&z#g|HUf{Uw!koCnSk>XGMnX9diF4Sy8ERahLVIre^UA7#B8j`pqYw zl^9w0_wn7Xu96ZOW`W1y@Ign0z475muDibeLQxN*ROgy9S3Nz#>^-uar1ckF)P?i>GC z9kwNH^<4Dz?>T)_!IVo&3cGCi_}1cG5wWr8bE8iqJW@(;*R07G{drEOZ~nfn*K@#s z38&{@vHy&3@BJ`x);put&&q2+`rDj7{EIvGU$$|?#4ncTe*DLgsmZvX@^r#ev9f`sIzaGdm}p)}!YG z%ifsSkn|MZozRc)FXUiFc=hd1Y29$1p zbNeYX4@J1{-u^!R*k29#F7U$p=~eb^eLy^ylP-v=c(^MS$5S6_Z<5M>?=<1 zv&`3V#2voM*uUT2^v#gL&;$L@mmt1zV4MN_rLdIV;cGerx)He~yp zLkQ0!vwo?2x8IYmZ+hsuO{;It`4V;`r`LM(wp|%jKj7mtzPaGf3%}0>J)C~)aWfAO z`tPEwM=x*x;^1p4H{w3jp@gU3{Oh;>_VBf-zs$Yu&>J^(J&5-UaQf!O`vzQ6b$_>& zH})QQV%|NlL+EH_WZ1+l1Ka=L>-6==KbHP*+sCPEVGj?Z^!Lw-U!2>`J#XW%Ej{Mu zJ@qH}!|7>%jSc(jnRY{Ge|**0xU(B?N4+?`;H4hP?wbd78&Fwz;OETSz|XP63D2`D ze?9ntug3%5KRtHp*!nFl*gu@!XG7nD6K8C0y8feG8`gjHBINuR33m*`E|7{6W*0At z9Wi?JZ1GkVIT#iWa&%qGMx+$IM<-G`kFM9;z$$&c=O6WmUmZ8YCwSoCyxI6%Xcvxt<~)Si7*! z0|(jp>`4w4U$K0h*K9RXhzg74XC;XV4jwU9oUrk-!s9CiZCEZ7SNjK_Ur35lIJ%m0 zb!9E@as^WO9mPf{?OBV_tL32HGA~+FUsPLMgVth#v^uHvMG~F46u-%F7Cdr8V=UrL z1o17*T?==mrzZH!rgmH;P7I>?7Sk;wxqL! zPBpY8g;2bUYbrw}QPaC>Of}+hU=Qa)tLa>5E3IsQ+^9Jn2Wu<5Fw*!sAdIJKSwh7x z7FP$hoG;plqhdxWwY-5wd)9LNDprl}yb@ZtsPw4LpA_UMjBkr=c@1#YYfaT+z8PMv z3|NE<8|52=E94u4gD=7`WaDm+3Qv6tGeeKlm2nk(?F&hCkP|tpNrp{DmFiW~A?_BE zsm=`Qa0O#c%h`n(*Wg(SVV-U1;<%_EcW25O2jZPIa3__|w>p5J(N~867;Akr^D{MWU za=HpHgppbB%CW<$+rHs;pl#n;-xYm1)W&xzthKnc23BLL@m5$>-{y8(Ex&e1qdHVx zs8m{5Zq@3g=)jNrtXf38Qvm`k4?)-^ew5H31+?<1kQQN9g-?wr{xl__?I#V|NktvW ztx@ZE=~%3oh_!Z^z*_+a7iKl`l(1DqwH+!Wrk1FDRqUDLv?~NF)pQP%mQG>l>l&hM z&=<*<7PJ*&D;r-)^M*X{QQ0xuW-L^1v~T?g-N zR%5C#s3{emn)!sYjmAXn}{7+EptN{Cfp0_aF`B~QW9!Swf68M zt8KhOs(1^tt`v?}P70n-Q$?{{#cyp49)Wq{rPUO+x5|K)<5N+nbroB4#F9twE>5in zsu(SLiC#?vPqUec#jq!fgU@bep-P}yWrZwy(NH}$-{G}Qx~)XP4`M22i>l*JS$@w0 zX-LzM)*3BIXe;Lj$BbY`2D)QEIBbqBuGm%jRU)|SApdl)Q>X=~DoxYfs!}J#OK;z# zJ<4DP-P;=~dac>C-ld2H%ZN9G)oQb}X()@z%c^MtIzN=vB7^MDmo2#97nL0wNtJ)t z1J$@extJ4L&OK{G*l+W7%l0RzGN4BAcFnT+WyP{@vVVR|bboJQb@Vw1%BrL3_lW2r z(Q`Qg>69RT)QTTt@bsMM=>Bo>GVm~dF0~X>i!-Vu#Eyz?B@HU7k#TK?YK#@8{8-|4 zy~gcWJ-6$@(O5mVW1|JPxrO*2HHAv;sL=|!NE*S-F=}+%F(b~h3N4b7ScTBmw|2aW z3P&}5!Z#e>PEtlxG0xp>LHwlllGIr`IZVX5@VR$Ni;!+r)9#dG5z-dK`iLCuL<~9P zScG(inzlwwTaVbuoMRtiV-V{i?U!Q_QVf2d&1oa#7|KPAa&(dIlw%Rnr-+HXpUbfb z$=gAJE0bdpQiGayshYMQu~U$%vlQJ?lExv{Md~ldBBV;h&f&BgITj&(ix}nTBJGo7 z5z??uO5RvG79l-|n1G|x=M;;OHmPZw)wEtX_jD?rc9!PJu`W`v9E*_ls%bx}X@9C| zN7S@lXgb2uMLI!_MM#$-)|WAFkz-w?t#T|viaSP<5;?~xITj%$A(q5xE;$w<K zY58(2LUJRP!f8cv47@@tmD6hEScJ3`F&C#TlVgwr#3pju8aWmr-H6yEPNS3S6pN7V zM=Xug9+G1b(ldyqbJ_+u79nj$Y%-_4CC4J9j}e=|X`jlm2tNBhp3}ZV8pR@{gb2Z* zF4A~879ka>Y4g>zYt*#s)wI{uw71o?u3Z#-k#YGQ}AWTu?Xp3YTDIm+Rtj*K{f4FoM|U%>LR@% z$0DSk)wF|ZTEAlzxPfvkLYktcWvglDs%dUDZGoCrrKVk=rd_P2(Rq16%fHmL8`ZR1 z)U*fGwEwDUrIsA+GiY456OyVSIA)wHjBMz#l6v<(KP^A2XU|cS@80#-%d66|Zh>mESh2&K#%juN%FV_)Hte*MkIEU+h8LIB z%r2(=7dTlJ8yhpcy0}pKDT%!o(LtWTOXe*-Dar}Fvy#j8bpi9$uPoMqTuv z)95tY@CvuO|LRQi1@ZYu%CB&jl-1PwCgP>i;;y`ZxP0;cjOg*vG0_7CM9aU%MOV17 zzf=%Zt5Ed+^MhZd$NcbOe{W4fbY)dE8~o8FWcx#M?9xf1{t^CJ$#a<0a51j-!55#f zf~I{_UvnLP3!lc!!%eR6oTkjf-_j$5ufYOB#C3T2rVeNC6RErBywpJ=aPcwcKl~bH zq09_!$oMj{0RFrqr36xZ8~x8&zOVnZrwLc1YfGbRYoqIvM%VU6*Um=Qu143ljjnx- zuKf%d|4L4?>p<}xl&djwe`!}}AEgYyqZ0IF`O=+|FG|#7CqD+#y`5ik;d%-pYincX zE`T1vr>S69W5K>A*FIEvKZCAx?LGF%%)KjK_nowSX;;bDt0_~ibwSr$HBKab(vUzOU=F*IWlkCSG$L5`ik9nce^4&A@Z8GFW(oweAj+RenHcM4vppgJ2dTEw(llL>$K@pn>Q5yb>zr1 z_W&6S{Vxy9l!d#|b+|F}P*diiWiQf{LC`?I$f)ICaxM2B)8sm^d}COn>p;_#@MSNq z2M_r9Sl5ALn>Pb9kbvj|6eO3cG*dfHQMi}ri-$N)H6mz=M8i|PcYzE0sNVaUl6$EL z_QqOg*-2S;>au8Tw#ty(-260nz$7=L^NF8Rx#qZ3L)2x@3Fx3&g$oWWe<`f7Kveh| z1xTx~>p%`yMSav1j^2qriC%k%OM(_yzI3bP8`R|5jv^mcDahP9wRtW5Bv2ji8M+M6 z%g0DQ56N|u4%y}=*H)mpS3|QIXy~UvbF12fuFZhERfD7A=%;{tSgDI#;f-iMiCTCg zx9~=;)h-2StZU=3%{1B2HRQ3EX5w*E=0?$&Dl9eT`sU_&;G%G#7Sdjcw_SzWNmK#ejqgGJ1CPsmjqz;s{osu{wl9IzIX(uHq`4YQQ(k?^BNJ{$Fkg*pf?KfmR zfszgwGM-FHhYT5`De15wV}DALK(ml+=}yR8nIoDbkQ}1SRz{WE?|D z{S6t%QPLnaW7E{c#nt&u}b3|$6gs0~be{tXjA(=V9^mcJO*m?`v2xz^ndEG^P?HQ$h?f&;nSB~_Rv z2;#uX0&e)$IaFCBYndqTUGlM?Wg23BYhJY!Ox4#)2W z8{0Q=A=`e~F*~eU6t(=NNQl1**u+?gni)jR0fipe9h?F!NU*t0u0u_c+&J2((YPXq z@^BG5mQmH9bWn$FE9n2!Z726{Y9=(+P%j&9VkUjr6ZUP!>EM$D@?jQLu|R8Ml`SG|IGE3T0s=`<9aIKmv5l|VDko) z(zKS7i0cpGXLGZJXH4qTGy!L>6MCo%cs z;y$II)&y(A{r!}unQ}~RZf?L2!LPNHj!s1>)Twl)i9Ns01h6LGhJJQ0Sjm`Kz6X(f zE8RF!+MO&z?-MC`A2F`6) zt-({&5B?J*zP4g3{!>G|wqlDMTfTuXNl+AP8D+a1E*0|A$k59-aGts@oUEh~HpTkP17lb7h%|wxyYjH(o?EHGb@pA?*H)0J2_8#(BSf5NUB#&@SGO-HgY|qnswLCM1Z;p4!9@soyZUd*hn8p&D0gGURC{asff)PqaWW3_1&EZ0I61%QLxYKuz7cUHeIDY8 z3;|mTaRonhEhT+F$W_v5VNJpj+ZuXZqqyfrvP#44LyO9M0OcEO(&_4BizHlBQR%7h zO6+owus;JY#F2Qpp%-3iAxU|#6FcGcnvz7z4ZWm1HSJu)enNNaC3)4SxaEo$9Xd&O zBX%L@eF3p~4EGsgLm103kPmXq_mWOW>`aagM{F?1W*{a?TdKycMT{0AI!Ui0CNO`F zn84f)_=j@dVTcLLvk((lE>>fYAvS>Feo@o9;`bSx)*Jr^ax4!2MP6Fy5V7TmiE?j1 z>`UbDCEbJAHynEnv3~gWlD@`&k>e-CL}}q@y#D-jAY$U_*=pJ>HLYAtJ0G!H#(Xtm z8#qP^T$J&F3bzZf@A&Cq#6*tXQ0$*`S}bCFIF^E#csd)g?VPp%v1*Q8irCv6yALr@ z#OVwGP`?{7T7c>$?MKYZIXYm`W24bSzafk^ld5HbUIp(Wr7a{for`?K}$omLlA}=j_h`f6c6E*)Ev7MY_ z2;6E5IF^rCImgx@CaB+l*l@1pF2v{>>0Z)7!~~WePzJj=M<2v`LZ&-Ory*8|v`*3x z!~~XP!~_Ly#6(^nVuFI(5EB$Ug;)d1=p?<5SOsJ5j>QRqWdLF#Z!%({+$o6l;&P`V zCdxe*F_EJIF~N-+5fc|2IgtEN4u zroD%l;C&Y?dko?n1Jqb5V&8M#S!!B6VtYAlwVL)IVzlhpOWJ@KEl72eUP6p|WG`t8 zV(}c?g%~Ynb&~cYMuTuC=`donP}fNc$9e=U&vlY|A(q0iXv9)EHWV>hfa@fUL2M$& zQvY9jUjko6b^Sjfh%umm#(j$w6*pv+P0dRnEJ`5CBChE(c|bHKn7k-xv9V}1MqFB3 z_g4Szb*-XStqX2gt95Cu+G?v+D;CG9AfL^9S>@%q85PSa9SU{)x9gV@i9+#%o&$TP4Ds`uCfEo>|1Rp!_`3^ID6F|*Sd{Ydc(~D}g@$hc{ zrS-GCH@dZ~-xWpZpS6C+`i1xhg!p#=|H@biaz$8jX^3-BNb=y2$y!cohhL z%VJC&1?o%d-1%*$X*clm8xv$ZxD<#lLTo+2zNat2^Ge%#VL-6&K=zOS7RgL5sBiIl zc{2ujpMptsWNT)oVGK^}7VJIaV^9Or1;1`%ZkUSjK!k@QJQU#(2&)iILwEv0&~2w8 zoR07egfkGHkFXly6$p<+cq>BeMBVlfLbPDoRv?7^+FnIC8{vBh=OCo6jz(C3G#!Jm zFT!IHZi^7@ownT(V&~zugAn50ZDj~gM2MnP)pDDAb2ZhMdtPP7jC$FN% zxSg30E{HZK6&p4(n`6Xz@(3IG+rY+!jLbMxCbpRNUdCR;a=^&?i!d~;|8baT27Me- zltH(Gg^M7s1i(UkTgDi8uzwqbygz#_!20LjZ9<~r8rhNqBv5bI8w#lli(7J zDiln*_VF^9zGoi_q$1Jf|Lk?Ur0Wv_LlNE(`#;`$;CW9bOHpK?TL*pKkN4{}qG~-m z&u6c%f9?AP9(sz`uU<)u0G`r2t7*ZTKk%&s zUlPCSVY)szXAJxlzv$im!SvI#yan>2I`)J~_Xf2uLJC98)rR~?!EJGbLl82rqIlwt z*7(Mh*R}}ZFob+EwnoJjNQod-dWIQYZ$0cqTbUYeg@>bBdx#iK0mrd&|Kn*v~ZO6jrIB-K8sr zuA*Q^t9(RCDZ!Wc{AT}tprnbKPOHOlHD9eV4z)T6=XJJL&6_c`YJNo2>awg_0WWtyMPYMXRJltE5D$f>Eo21zlCjm#5RIW?MwbrW)p?aKXoql8V;OINg8L3+(Nzcw)f~-_&8pJUQ*9lTZ|30rV|ZGofey=KJT$}KhahCS z4%M1!G@2qMnj$4tqF~Q}Uobin#=8B{?WIeKyd{`Uu;8cQSb)>?KNso#=ND1yt>T5T zl||no=Y60vaH9U3(ywE7(X!r`VZ1sxfrEK_4$|L8m22`M%3@z~`N5#hMxsl+$)Ju= zd{v-?56vviNB7NKE-c1XIzLYyeW26+_{HBe_1!p+2$`C3Sg!MtKJ<$|53QawpU=X= zgu}*-^S$7>6P(=O-x!4{e86wl-UNqNxq+2s5$==3*@!GRcHkbMcsvVN;&0ZhJosBR zl9X%26ejM5w9CQB(bfc2+3(!11289ssBiIVGCl+c?*$;GZoaWhilW~7QeI+9?2&{VPa z7lZxHU~KjaUy-Jyt-6U;hSwku^=xJMI8<|77B{;jmz$xVNAEczAHc*vkBiOT#_y8aTj|GsyQ}`i>=8~Ii~qG zeJ4EZLcDTyx)AHu_SeP6#Yl;Zkt+6Hho%I3OH;+(hX(uDV01Czql-!0P1wb5>v0!* z6snn<#l?P*vlO$x%H6pl?7ktLcd$>9{uoaG=t}ecc4%8lFjC@Pq>8;?L%d*bXsXzI z-(VjZ>`Q~u(IoCB>|Vdc!}V+>`4AK`D~o$Ql*7Gh7sQ+W&og(Xc8sI*yR&6ice>Ua z#w4I=qIOQKG_FNTT#J;rmSA)(!RT6o(X|AlYY9fz5-gKzb#v!LXI$$6JY3IKh|8gd zBePV9b0fJ{b+WlLMb;smuMNAiGJMFm6)ABmQpMhj(2iiQXsXzI+hFe+j6Ge#M+cL* zncQj-R)W#31bf$DbSuH=R>DWON{#pU zgE?4fxD*Q-IdkjCRp8}@%9Q3B$B_M0+kLH(Jr|K`YjvMz)`Oaf$U7{h8#KZ>>*fgrOHrdp?k24?x ziTbbyWRCW`HD!o}{n({=N_lr8CCVqIItk}=R1R3W3hN&SEZPZ68>))Fnq8uY$MB=D zs$Y9m(dyrysMlwn@YDcrCx{d!@u4!SYm`pi03H4nuaX?E@<*)r{xKn>F2>>YeQ{n) z3#p^voAUKcdD{?ul-6Ujy0}q{&&n`3QsvLjQ3I1TNmxS$DqF!>Q`4e;Gl@y{n?qN9 z2hvc3Toaw&yePO$+6S zyuW+cj%YeR{rNXka0}!6vuK7|0+>ENIo#5W3S%ImjcJ~Okm;U^kc$6-Q9LP8JgH*u zU46B$_kpH1sN#Q&n}!PjTk-8^JIayiwZ|xaCigZ}T{ijZ-E;}2)w?qspO50tH;N}E ziYFzC7mSJ*45jmi^7!j;)1yO0iLLk}a(cYeQH5;Z9v6eg`3XIqWIbziVyW6<*Rhlh13&Df7K|Rlqj8)G1m1{~>N#oyF5-hhS>c0mBZ)OS#fJHhGQMl%9oifT`v;?ylWhgFplTp5Jj6zC`LaNwX3rz^NPE#`9BK0o1 z!E(l3NI{weD5S(Fq{JwK(I|p#q@2Pz zf8pk+ZInOdFiNm7+9{Kqn?0Lc6v!sw`Xe8M++YksN(@4(*jocF2*&&(*hVtQtw=z) znQ9y4­(H&Q!gjQ?cMADba5sr=CuW4vsPK}w843LDcx1A@^kf~7S^p})yOk5%Tm zjPYSsW7v(?P8s8)?8f+eps?zSF`h8SASK2iCB_hp#t>{H8RI4-Al$6AbH)b|jDbdN zr!4X7?3VbwZHcZJ;x1zdQep^F#j2M`Fy;@zf`(B2a|2FBha9)Qlhp#NdyRN9*wXE- zRgI8PqomhL6MriNO&jI$Nay>T9z#van1DsRRIRM^(d zzoBa;@uz>kpzdQh{e$TVPt%`|mMqh_0AUHjdW3xLlMyoAryyjb`CHJD^hJ{rTadyA z;rc4Jq1IHmQI(G^*gWg1Ez))8*|zv;4qK#Y^5$=w?A@r&6uz$5<|<22? zrghae*CHKrvXo&D=Cn<)0i1uP$=(^;o#ojr#xA79E~KQtO0ajK55YQb7q-~CYL_dK zj-#^JWkn9V*zMr_ZIZpOwmWU|8)FkvViQu*r6m}=G|LP~5xN^Bw+Z6a9bZNfHOS8ehGq+>>weDY`{n^;}F(W{hPJ-yvpr`&IB zLP~5xN^Bw+Z6a9ECS0Z+E8;#eY{`aOx$O5P?jPY+?%B8yZsjr#Taau$emBQJskCxy z;|t@p+}bVLjvZ!QVQTTI-D%GIhex0X7f7piUxZB8ehAr$U1~H(N;F4G)+Gz}jOGis zV!Nifiy<}K-)C#?dpR_hzD=5^Cd>SFOD!#b*CmfAT`|Hvo(1|PE9)P zy*%~!;1FAnthYLwv+pokBqdrTB@@*Ig$UCJz}&+O0-8x_8$|Bo+wyI zd%B0O8XbO`42OY^zo)l`AlchvS5Rl+HZs(`L{Xd{d8VQ`*(dYxcNwl`Yc8FI>ytta zQpRC(2?IIaxjBjk-CSx&#G50wl}wMIapoBA;~%_txC8KEbnr1fk09Iw;m;9r7AKZs ztI2y$AY{|&9Oy$j07;2?NEI`Ny4u%!Qd3Ux&>8c{YIBY91d z)ql2mF3n+{3~jPJ%w;+WyWL#ZK|f+HQerMrQXdM&`cSZL$W6#*M*QXJ4#AU`U@wo7TH!I=RTUlzV zN?grWQ>DvWjKi9NZm^YYEZU_izVHyU_2vOxF9~mg+ojsE%4kz?U;kiQxLIQ#gokMG zVf~W-2tu}R9!02XFobwN^BzOUv_FoJHP}bclNgVb7>|_XF~OL}1nW`bF&lTE@!FB- z@PcsLczq)quXE*Md(d`0V!S^Ywv>3nb z$MqUpU{h4}u^VoeI(~M)C1qT>Q8i#$$vH=z+*@ZuaIRarWSy7Xk$pehMGl|%THn#{ zoc3an?X%Z%*~ePk)LVV;(q{%(pF->B#eg;3D_EtK9i-pW1fyAu2o1lC?W>OwUpoz)nsY1vCZ3aR<+f0Pi%VOwJ zGA=2xJ*i^vOMSJk+Rsw3{~p`_5>FRy@KArg?eEQD`wXRWbYC$2h0%RsEV>wb(ieVc ze1Vks0;yuJAG}Ji0h&^;A^#=izzeW@xQw@bp)9&DScQCaS1>)E(OrS-)-t(*sw28u zE?i)Ift2_HDe(ot=nI1V_mm6I!xzFmj&*=+pzio6+FnzYsJ>ksKjGn+AqpteF zO~wyMi64+E_PDK{U@RR3`|t6CXP~?AR}pMKcru3{gnOQ&`+(_nj_w0@q022pY0w=$ z@S5=fQsM)o@Y!})UNCxtVEOyNB)@&Q;;57L=VPBS?ZZ;PeYn1(_p2S#Ud6{r*0uL) zKOD=~(ekvKiMMBNCVm^n%-l?56F*xsF`X+g4x0+xzU#3Zt`M4zP#fJ9O!s+oSJ)5l zBN1JJ&k&`#$Y=DMi%%I>ASJFqN?buOx`JT;b*``ist9i=ZM(uFkz7HK1w{7)GY$~l z4@M&;8TKuTOeFuH6UFc6Ueq-q~Mb^t;Z|s)fe_{-;Hd%7{F}PZUlP^a+_%et_l={t= z!3S_o480684tb{HycT7w92h7wA7dCdt}Zb%(Oe&Iz#{&MO|2(2MBNI&e4l}v#4}-y z17WdvGCs92@a>J^xWqKz2)_c#w>NMhY)+=T6sosh1drTIHV!xnAs*eEiIC4V3n5mcpP;n*}|>56aS3ybKIlaE3K`r)wg2=fi4 zlz4+d%~uqkJaehdo+>_{ZBO>7@i*;x5zeqZ8HYT4IlkAnr}+#-CVTpKK}74Y-|fwp zA$)s2oU$k1*26YpTHeG-$xIKAz0jM+^zDt1waY#Td2O)nW#h-_qj#`c&q!KU6dv$;xWquzAy!lt*auPSfVCLP$55uFYF-%u7nlOG;jP5^yxlaFAtTKjI#sIi8!a( z21r*{rqs_O**{XIuCD^N)lCn~;^#*e@(<)r!24~?$#x{WKAiKmX1(i9&?1!sV zp0B|0Ox??HEj;?lIIOx^ZQqsVEg;R#3w4Rk?!Dk|-^Ia!h5qOD+}#$KrtoeHDDYIq zITj()dK|)j2p1VUkP$2agY>lKLw|M@ctZAu;-FB>LzCsLcW}z zhVUB*TM*(+$ZJK&^qzr`>RMvVLQ2d+N*0m{_KfCpo1$GZ3tLuQHOr+)TDX;Dn`KfC zv!rROVwPs!W(rJy?g=w-zPP-(krFeJk`80R*kLSKx8@!;z`AOtOOUki&TY1tDx#Yy zHR&U7D+Q-L_k@`)GG-zrW+EkK5{zaNtXs{*c3M}>vbh+aZ-aE>6e+=jpNRk$ZVw0 zgC=_2n23~^h?Mjx3ib*fQm}3{5nFyeZK4x$n8!>hW=!_>x6@5RLPI?L>~Ck(pXm+H=Q$B=YCgj^5wcsX z79pRf4k6pxT%9S6I8tH}QnGcZVCyuWp7QHX;^+~JV2z|x@!J-u%wdsC&FFkAWZKXh z(Lz@m3y~5Fkt$Zx@&)5GJi#_(o_P!w3h(G@TZprkPg=2kQv7A+7Teo+ez|+t#VeVI8N8?=h2FW~;;wW5YJD4qU9^r{EX9F7@YIQTt4mitkzPdI3 zsRJzty<&abxWs9#@rD*>=9qsIOnq(ZrCQKme)ZK?D$%lfgp^o>l=M^!_6+z1%a~8Tge5u# zj31cX11;$eOyZmUWk)Zwv+{XQCTSjs@yw^tV4kpbM&SBs$~v<^Wwr_42m&?*GQ;VI00iOvm{P=uZx9lbOk8e3dVwS$yuGS#E%ofLU$HDX|MF*-AjL=fN*nM!TeTx5lz&%uD~OwfBf8SNF#pOPQc2y9p!DOp^P5PcPBu#p;qPk|% zpFmFd;|sP)izAyf_3D&|Ma`}P5iP26V|SbMUFcCvN=i&hN=zykO)8kmrTtK!t&=&L zp{bgFW!8ae&20REZ+Pyxw!Iab56Fn@*vj?In=O6*tJO0wchh)6M^Sqf_agWzISOmb zj#BYuw-B&M71{s6C(nDbb-RwLb&~V-79#`NXRllREEb}nuI!f@;l+A}J(2Dv0Jn?BLsh2 z4Z@!yJQv~p2(LuA93iLmJb;ioc@QBV=~u9X_$DdwO;WPBNiZ&M671{eo2M&Jqi=E( z(agU2pt?%mWE-aYd~*dPhNrUGzWGFE-{edZtLw=Ba2C3}SpeqanYUvmhH8ZPp6Sfd31+g3PBaQ+&tb2$o5s*X3e zB*u+9X;OUyg87LgiHXz8BW{>`1r}T>)3B$FT4sCGKX}h8kp=C3wngZ_VLH&>Y-3u^ zM99|oUSN`%g_LNERI#^QU+wGtOjBuQgm$!5LzS5nwlgB8-dx;iw#~SHXh>mn;bqu+Ct|Mo^ancU-Hrv8*)c#kk#@h5!w?aPjSMfhLXZ$Nw1+SLPn26kQcF2=qr z9aU@bR*m=R6@Tjg#cPG!(hnQ_ty{6acm(%tS%+6?TwK=s1)*2`v(JdCb$*P#ffxgH z3`ENCX^p#(ssT9tgB@r);RjRu3C{2191}7jP(C zXF8fo@LKzCyv6o&6h5(#Cm7a@(ze)doi`l zOyFyIA?WcTEi;Z^vOE{ovfp!TE84yR;_AazwCOs|RH{&e@O5vHj=U>0!!$s9s#HNg zfzlNFXGBw^L{p@Sy?ene7|R#I+%mXrJuYTaR<2TI3F3w)9NDFchr&P(^yyA$YG|l$ zsc&kOmt9p9Pi;&lnj7N{vlcIm`t5G+PGibr2&elE)pudQ``?C6T3dPhqeFzsI{+a| zm;-eO$w6Qe<&hHQk&>Yg!JYxXV6O5qDvmd?ogj*rF%A<+oxKwFGV~WHg;h6Uk`{)2 zqJ0?0Wao5V#`}f6j72Zg@EwFq$5QQO948Y+krG9b5-$^sUM85Us8~rR7t56&laQLN zrhnbilvC5sNi@^pB5Es8b%ouE=?qs~S8HuugRlhGuhrTbY}|^JXp59oT!Q@!{DP^9 zYnM5CFWL{1><^C8y~h3))BXmv*zk6(+VFO5$LzJ^XRpUzDwS(Z_wq^)mBCl5f1iW=4CLeq79uj!~-lUk6(^hy7=?!exvy{KdM8bTrgm3GnU zOVOLXOQ1JgZhrb&N9>upxPAnnxP7z?&lR&42q>{iMKr{ zk&J>y$2i1L(+qVYsLVa#3viXA(|);eB9;{m!Y}@2{XYuV!;8lmXArI(jquLQZz$P% z!sjX^cEHbx zH?$_uGU2{bfxV?}6MprddSltg!UMTh9UsAT)Fqs#Z8*ZeAY>~4if}r@zavZ_T#FD* zR&IIIb``>ZAmrfY7YNz*LAu&jBK#M^w-Npu;U5tG2O-nk3zg5FxHmkhZ6ZRvwYSYi zxEVs)aSMcO1HA~}k}{W+lp>^xDM4NB>-Eu8u}4Y5H^pF!4E8O9{jaog!b+ zj3tfmv7`~c|CKZwuB4Gs!=7l`{M?i>q@g!D~*g}J`yb-?tl`p5J05%{ zu7|%G#yIT!AAxhJ?WE-m_46AOb?&xH^^Nti`LTT~#MXyB;APf{t1&}oDmL%UMUnRG z`Z?$@V|wNyWO9x{h+!{uOUMUkk3-0`9*>X;I@1`1lo*ASe1KN4CpBN1LBpO?_Jz1< zcm=Di?1|ffK^+(-OQURO?5uP@Occ#S`DO`t&ncgu+m${9QlflPvT222uizO4+kl?l zj+=(po!H91Fo&mG%1^yt=AnDDx?6PLBc9)Glut^OPfC<87?m&B22_3q}3I}=!DvR(UtzWaeSmieZD~M z@q2R>V>^1>j`P)I%x{39Nx~$n|?Fzo+VVuBOSaeoy6hk;44W(SUG%m#aOQ-%%$yZ+CWn z-y(8;x8E=FsNBuiRi^B|5h{0BgZ(WD%L?D z>%F%{($tYQuZPBR^2+CC94Avg-+$}><@0Rs>~F(kB%hO#d`_y^ZIqGMA&1xmz7h?nP<%{N83>QiF5r5ZVhhP5YBQr(Ki6o|A z&p>w$TY?L8su=JpdwMXx(CmFO65VcmhEWK2Lx^5l^*xO-2xs8;IE1qijz`F{B!v{YG z-y48~c=6#q zz{1mk8D}S)SKz$NE(jwJVJ&QJSx|FQy!Moc%M;Bw7CR}KL)ei~gBkzcmX_nSoGE@s zx2wkKA58ChxZUOmCu)!#hkS3)aMfbW>QQhTUcS2%#;-BqaKg?NrIqz)wI+xi*+IKF#re$)jo-DceN-eHM zN?ePSY*;7QTIfr#uaRrXI|W@!-V5kjg3+~JRSreh`kkV>%e8KU#Bgtb?OG4#aIMfQ zLcVTgcEI-Cif;uQ!>#!CCT>Ma+=^5&*VCzYyT0BUP4#4Z>-i&3mLY1Zy|n{|useEn z9F9iWy7pdZS78qa42^RmT6#K1%sYOHp`3)@$0?`?gqN(+!46lF( zb|J+#b^hkM^oMbVHvwTB@|=zH{2YEHUma>rV8rY6s2vh!Ht9h9BACRDY9^>TC-zG7 zV*wAsiGwT6Ro4X4-GUdyz}oNy!lV8(?JT(L-U)6P!si)+kn)Bi7dBpFUKM;Z*;$8r;+$2De+5E#oh_3-%@@>pZtxY=#$caLZ5t1Vf0DC z=#%`qm9!&YS5()0@+n9Re@V>t$$2?^GSrijpFf&@l>GhiF7&vhO301lkL=SDeY zRL}b3Njdy6)cKO1Kbo$W{QYr1v?n&UKe8K4{E?LSBPsDm!RU{I(H{k)KMJ<#`QszX zr|6IOD~kRoy)^X4dlg216pa3OpTg*m%N5l%e|!RR!e5QE%g19Q`J?pL5?^Ga_f#t?2*{7V<6X9VeiOQ?Aqpgnzwp6Ziepf zcJyzD)>;k1<+GJv&N3AHF4(_N!ku~b#DNz>c6^s>z{V zM#d?{$yVq`IYxF(?+~{Dr_-AHzS6E#_{_!OhR7)lt`WEkdvHsMhJ zsSCDNw?vrKIO^=SQqb_qHtt&aE<)b^PY9JjhC_)T!v^|FKbA;6SKM+y}-0xCy1}VuIq-38A!MIO`U|0*KsJ?2YmSCJoC48Jo zB^Yu`a20#U1?(QslUgn$jgHOF`VXiq`mF!Jwlzoyr$fntIV91eWBSKf5OgJ;Ji;64 zb^x0gaxcc&3MW<-N~;>PX*fDdnRo z+M?|V%_Y~?{@HZcq52LCcyE?RczDmxh(APm!Sq~#kjc3cAsv;qhm;?rL~EpE!v(>f z)O_8mwTmG&JYUGxT7NvG9O<=YJ_>=^k*&4ZA-}P%A)$6v$U~FAII!C^xu@|zQld#x z;(vnC{{(YO*v|Xkg^(KV39>c$w;cZGl&bk^u?&@KH~Hf=#ve(E7D-9LDH!v!VBM+3 zc1R6xGGS}+FVVG_n!lEZD_)Gc#Zsaw6FZx$*$*zcnv`gflxR^fYEiK6)Z+P&8vX{4 zt;Nf8I7q(pO;#zdkMc`WST*p^*{D6iuOo}_DIQhj|HP11?x`#%cZ>&@r-h0s8!UbR%F6GHt5Mi zd+P#~a#wthyR2NJe-m6{xKy~R+AF^jttbTwX3H$ym5<0!w{n1+`S@(#a3$in4igiO~f2-!v) z1}4!eDbXq^`ErP0%QauIHwIS@!O2xK08RLf&A!j=I5Hl*7KMjeJ{0o%cud=PMbSsA z6@@h=-gHHQ_*xyut5oyp_D~exOh1M1%5#3EC|YTqqSzSuTv2@Xe<*4fP+usj6x4b} z4FdH~MGXe^FGU>y>feeQ3hGNm(I@_+s4<}aPf^t6SBi>(qPzA{i!KTjH3d*FMNQ*H zMOB09t*BX`HdEAGP<<42JgChT^-WMkimC&(g`yUKDpphjsJ@C?2&$i=lAyL!)FM#* z74@S@#?)ZswhK(FO`uK|0hK5A)_>)v{;P4@1h9B5GeDu(f$76lf z@zd%X6Y=J%cyhr(>2`)2vS8d^t)+t-4?A?|zQtaTh(3fx@!)+SKHbp|V2ygN0iaG& zl+QP$tbEQ%NqM}Zo0=Qyrk=_*Xo==nOtG{ExZx`5pu|Mrih>s?s5j_S%tgOI@C%EW z;*@`qs2%Vlm?&ON$KR-=lK(U#pSDaui`8N!-;nycd4GEu z55|lZo0o_uhYTHh8TvK^8B*7rs7+#W9S$b6u;6Kufn!Kr;-uF3gJu$>EeZ>czsB>v zn~sOsQ`J9(1DISl=*b&1= zwS|xoqnKdf8IlsLYNEn|A_~Cq_!T!CB^3XYn+IzvxpjX~LIPt_>k0$8aP^r^k9y^zh+H{X63a4r-Cd?h>H?s zA>Ez+JAXo%cdp0FSS&?V5g7<;r0%RAIp?{P*Q->BynA3k%M{e;&IYIugY-wQ8q_DJ?9Ri}X;x zJo-Cw1_CWC7{>oNzc}%h=Uq8lE1uurzn`9gjvO}73JZqwKhDAXoDCg@(^H~&Y&qLF za@e{mG@Hf!=(YEeSHp7H#4ap&6aW46Z0pEj>nxRbZd?EIm988XgoOobEjimea&}Za zi}9bnaZKs=0EE-Sg$jiQL!oDS8;>0wIUHOmEb!&bd*E0YIV@)v#be9a*^vXcv*e^t z&u)rmqLrRq9Xa&CRC?0ODOEf%OU~|&oIN7Q`GzBB4@b_P5#$U~JpAUEujf4-IeSHr zv$x_IW69aek+V-g&e-bRZ*=W7*pai3BWK@$oIcOKvD}rjpCe~qM-E5GQua!po&yvQ zW@#J!?C;1qFd!#=deB9Ld)aahbmSbQcn;-%oX_8KAs#gB&qEat3KU&K;a$;@qe`9v zR+5bU?v?K&Qdo{ERRZ~Rm?LL|y4Ps@=W*NXrD^m$5?2ZfI5g*%8zUS!Oi5uub~y(- zaz;6FC?S`eF^-(kj-0U(J+6MYQ(Y53WPK9JYH*@!0k%bL5mOp6qfe6i=y@o^nUdga~pbI&vmBaw;RpnWT7j zvC>oN$eA2L&J@Li0aX6xy0Y`a%Ea%M!3Q>}PxyU%ds92r3lo85&4wwxm! zIeewa^<1+Qk8Ssvj-1&MRu(T)7%JzGo zb?tt#;<5Ep@5nhNf*ibZ!0vWEc#0$E)Ch7K9XY2ua+)H@S*Un8!_L=FlOyLe#Z!s@ z~i%qM@~xwIY~!OizBC1@q7pWnTl^+wB}+rJ*O)kwh#U1YIWqC z5kbx(#l!a$U(Okh9KJCX7GzHkXO|Qf*m4#-a?Xk%2Tc&jiCO76%aOArf}FDz58qS# z=UU>(`L^O|$A9Yi`ZsI7aP{1#cx*Y}cI2F+c(Ti(_6iGZIp;WXmMR{W_Ds*SLvBrD z_j45w-%tJigr$z0^Ayh^{EzeP8$Wr;eXj2+9y?#0=g2u<@v!y6*b$mvi#{&Q_L-~u#+sVTd^q32rW$hk!E@Xe92kALx>$S7esmnt4RJ(oCgE{h=Ndy2;{e=c+6 zd_RJm%N38^uKT_t=LZqw{Lqo}14qsk5#(H{cSR@5GhDg25;c{d(sPN6uY}C%c@xg~yU}mm}w%2y*Uq_bDE`z422= z&ixVOELS|NzkL1N@5p%|f}95(IS)8;P+h?m+4cN0#l!l`PtQY+oQD;UdIJTu=0XpJ zL^!`cqIlNgzc1%uN6w>)hi^uVz3$ncyx_|Dx#F?g^N%`m9#cFs_#fwPPo9p98&1#T zipRFsV~(6BBFK5tk@JKjXNBUS#}?t7vwr<{ZhD?lJPnqfS2%K>jv(h5N6yoZoM$7* zc~0>xu+sCaBWGm#(y3!f4t35SI)0+B`D`5N6yQNhou>hm$v`?U{}s7xKdbP_qV+4 z$az)q_|J9C**E^jmGhe7c^Civ=X%wV^J~T9KUc+WFaF(?^Bcuu=hI(1a$Z+F+v7iv zLA7_zcIEsQR|*T>#eY9NuRC(yP(1!~?fCHoG#tYD^i9QM+v^QS&RdFyzPc5t>7U;> z&z18##ZwCLTY%#6mLuo)Knn}9%XwSz>|)9Jy(8zH2y*`5$a%++^T!Bs-c>w1Sn2tr zBj>#ca{i=vN-R0=Ida}tJfrcS$LpgO9qQ_tmcsbEl~3Py_=Z%;|*%c6$Eq$oV9KoKF?cTI;z!apZg!K@My7!h$uHoX;FNpDUgu z{_{BeUw;_t>iHkIBJ&FT^5=6$&KHV@t?12hzJ2Fshq-drD;~SQ?Z`p(fM?JCT>qzd##nm(k0a+R#l!lG`Wd~~)V*E(um>A$NK4LF zjvP*`DJ;k?rRX(uqvJPI8-n?;b*NAV=_ z-Q5_etP;la`;`R!UDD^=n?N8@OryzcYf;)bExp&uipnca<)-C zW9bw)Uf6ufH(WWaaf0>NHjW%D8wHOq=gxV*+ufCeC8gl8>x*q2IaqEA9>4vQzFo(j z4U~sSuV0RB@5teV>|Ap2{YCKD<4rp{a`0`&oO0MwEi7OulvUzWjTxO6%HFAkT7HXu`AlGW-eSn#~IwM;c_YMs6_3BO2MYz}Lp-8rj3}Ow?7;sRn7&$UhD8hDK@( zvR$#dxwpBIJX<5>hUa08TxO8%`bw-32AQjoGYoRKMm{viUo>);LH6$_a%LE$Q6oP# z$h{ib*`#odMs_zmhi)lyPBF-t8u`K?zt+eJ2HA!$@HjRr@U=QqBbA2dryBWzL5ljT zNcd8XA8WEk&N9dq8u_U~Uf0M>gKW#!HXJt^WR^yDFYqNV)5xBN=S_|L+aUW7RARii zK^ACa3nS-djT~WkKGVoG203JFk#nd)k{UV3AP;KfV}q>H$U_F%eH)Q;j6vpVzf3y*>VUt`NPGT-p{Yq0wpp3-d@2VZqGJdGOp z#2_zeWTioN+D>9kHAtgIt}@7D8X0d8_P+A?wn1Xs3-W+L&eX`!26<2;w;JRVjqF+A zKk44ODYviTsn^Ip2DwusUm4^JjU)^*bVo_gmPT^DM&2?!PiSPdK?d(6u~ryliAE+H zN8EcT;bqC=RgUry#{RUa0k=X{hOCvWML4K~0RC{c#gY2@0$Vu@ma*z)l zWYRanv2J&ePaI_Yp5a(0JIHwsa;Jls4Nc6G)(#3we%V2G*(=O5&p~c+kdGbYfW5K5#_toBbC!cV>LCAikm-ZNa(?L`!}ksIT23%t7W1lUQ3A zU+n-A1DHbY1hO!IyanXa0-I;RaQRA9D%Np8xZXL1+zf=rLFQgBXoR`DzMvG`y@bX3 z|98!^V}V~24H+SqcQta()5tFka*sw{GRUtqk}665sgXAf&rT!#8~gVf;~>X5$Px#+ zUL)I@H2+c~+Zg0Cjr`i&eYa6^_r3->R3rPCSj`$qJw>~N+~gqlJIGTG@~VS;2&6BP zRE+c#dP7w&Pq5oFM`>7&Nr z*Sl!@Zh^4SBQhG)DjOL|!O!=%ct(=vsQ^Mbj|7mhK<=@TQOpFl1`ww1+5keQyF7r< zSd%@k~EohZ3KLM*0$Ji&FN2dG%bkqO5i?%nC-RQ~Kk zMdKh(FxG)8R*hWtM*if2zocT7>saLRV-0F1E53LEk17F`Dgk`zTRIkb5X*QWN)i=| zRVfH>#h#N-OvS%e$0ASgUPDzZ>W;CNY`#}TD%RsV7I}iPhN)QePd{BL>TMm1Ji%D_ zatEG^4LHX7<~CnGnu_%=9g94{SR(?lCZGP+xKyk?=+HRGgIJa}MygnBz=80p?^t?! zDprM#MV{cjMyXi7Hh$#&=s)9g94{SmOits(Pp5#?-w^U~wMg3C7~+m^?eL z-?{7ov_JiO4brj56O46eAl3;J%g#x~8mVKECm8FnK&;7kzf+!yHBrYRPcT+lAlB7= zj@dF5YnF~ho?xt4Al5IFWB!qfRi|T-Cm5?d5bMWNOaGIKmDI7w6O2_6h;{k{A1+J9 zI#M<+C7)cAiglBYMV?@+%0R4fyKG_Q<>fjS zd4jRHIzHta=bY7RP3m6H=vd_G<^2Y~YEDW{k2hAuTTUT4wQ*j3V|{Y5`dxN*B&5O;hnO@%zYf09{VzY-0&v**Q@TnD^k${~e6Z4zn4K=k*jV;M|V=`7V zebCVIm}ae+o|AW|&01D7C3ei@xz*)!r%tIpxDw&e*s-x=y|S|5v17^!s~;oqgG~5Q zQ&WHH!kU_e%}B{Sugq+4Qr^(eR67-^Yi^7;#B}5-jBQvZH761_hn84YHuR+A9PD+` z)I1^hoHW#t#5;GIc_3;KMY*Is0JQ)k}%q_2&Z4kvU5j$AKV!WXhbz)QNNezi? zafKrlnTf&HEzR|dMl8ynoFJDZ$Y2qYWO&s>hvKJ8)~x1uW6Qjz=2O#Z$vkS1P2?IZ zEZ5SNuV%w*rORNU=Q3_0&QUf$p>|V)!l%Sr7RaV*5K~b(l{Ter12}A5T``e1OZ%a7 zSIiW!!$ZBY#A&VZh8CBhW;z^Wm~sREZrGem6joh92WA?po0yN9b#!52K9h(W`cN1TO${2AtcWla_p%uufbn)u)DO0M;t1DCnsY^tThb*I_ z)HW?#Y~MuoMlNq|jxUZ)iN&T?RLapvvJ8yGSR;l2eqC}=kZ#W5j z$hldb&*fLi;Lb%^QVUm_qFkxmQgKKWc*-jzp=H_F$}7uZ2D(IT12$~Rc2}(<>|mTD zc~lW@u7t)H#%oapWRt6(26Fiwy=Vc@&pI&ElctXun_6C}4VA_3GsV?;A^l}&G+X{iABpLSl4r8Sj+T!y z3y7Y#GRw%B-!eqanFlk)V}?t6Eq5kN8%-)G76;~2rg=IRiegldaD6w|M9IRLQWY&* zXNujKtS&`hw!H3hbS1O`QE>nZ^rlIbvow<1%$J{xe6z#%~5>^bFYcX#;$6iF-Q`1Dx zGn=N75G{{}Bl@0~vC*6Mc~J%GS~)0BWzA^yYA~YYO`Wwum!jsYP_(=JyC}J}?y*$*H_Jv4!CJ-T7W(h^nxg>z*s0RbQQENXpQnZ}p#EYJV zoTxeTPB2E!OyjVlBfxSMl}$3{IGa=Di}HZ^b60C)j(&4s){d++1zOhC%$O8DX(wjcFg%nl9s-G!;B>qdT#5cHr6E; z<#`8a$W3eZcWLxt+8ttcxf8miik{ig-q1r)Q&Lg-gsw#@fWmR2l|gPST?~aU-KVgd(W2B-{;#Zc$a5gm{?)(iA8mt_%{TR0;8h-zs!B9B-7qXbHv7bT3uDgm_K< z&DiUV9`jTIz&_`R@+Kht?z#G&1F`wCFVR$~mbD`fe9?*tN;DnTT70f{yA~d?H(KtH zPk*!@BWG4uj5)KnaH)1Sv`>@etib&!?41&o=X@WfQv9UkdihkmIr5ZUR~m)56QElrfz~N{$jBd%MC-EYz2wQ{6R31bwFM z?NqMgic5`*WNfpgO|Qy1d7CHIi_-aqpGi(iSX%cBXuaz)kAvJ6;)|&!YYFwQRum27^t@!3^3(;U=}iA6GbN7b%UnpB*=z-Ob>9Jwbgw-hLx zhE-SJIG<9~{JVMa+Jr7_LY?KTu5~$sN_$Zr_YY?mRXSw2b1E-S#$-Ykrwif>(=;P| zZB52U$iS7-Le}R>Nl$zGjFp3GXk?Cpd+P2tTSHUu1-KlkhdV%(DMri0Y@{@`HrC~o zV6$2AXV%6W5_POVwCm*%B>Y)iCHWV69Vkzef zI%+2}k?Q!$V#?Gb1pGhaodR5z{{8&Hh5-As(+fbCO_W9O0=_&y-F;MmwcrcJ3B_w$!~QCs1G2*B(5vXTqtvJ7w2sJks+_ z#spjIxidVCsSk#!#x`FK(|(FH*9&6WNN7!{Vi&6k>L%5zRRL-FAiQQeUb@sgbDw!q zbJM9+iBp@J7bC-GiB>NCyLm@LNh?w%W!3TK7BtaR{*+z^yw=JqA1A%1O#q$`>E>&5 z21#W#ll^Pynx%TJM@?mJrfjpI*^ENf+ggi}&Bi*a*?$<*JDqX3JX>6urjkLnYCNcp ztcJwI>E*GL0&0XssTW=tu3Uhe4e|L&@OuWbacF;RNhFWL{Qml6Yf>dO z)ywAh2SP`4Ri*>$B-8{s`S9faVjlLP!7I%xfRU;7$pj+vhdWM~i`fAwUpE$c?7V;f(6Q@n+KKo z89Y;FvLY z-_Px4$+W+_AMtL0(j zj7W?O{T|CBZusX73;ho9&l?rGK1L^33i+gjM zZR~pe`+6O`ZUe8|!0R^fx(&Q;1Fze_>o)MZ4ZLmxuiL=uHt@O){Eykd_D}7d`@itp z);4XZFfueST&u1bsMpGc%F2<_z?wpBWx0}HHdtR)8md=o)ARZKV7m9~!-b(zXQ5um=fjhP&Jxi;J(b~VZ(%fJ zY|)mT)$zfRMp75?yGE*ode+RtT4q;AM#^L5YGvWz5wNN(nU`ZPUR4+^WsE$xXU%9~ zs7}?-qW2eSS<_!QS}(6DA5|)LtX-8c^+n~CZzb+N=0hdEYXsR9j*q)gAGz9(S5T<>95zaM2TIl(>3r;#Opr?ldqllP?XAYH*~PBTHU1Fs|$bBNy60RN+6vW15|3czo4! zhR2iKW_YBeYwJEUgNE)f!=iQs^&Fe43`s-tlYvnbCm9$gsYddUA(3SFn1N@$F_4cP zV~QuoO!FbFg5WLWPGhrtXKa@hIwLOeT2T~Tt~$*z8R}k(#VU}yMY++~?9f_IBE=}K zTuD~XVo6ty>#N{&vL4@HPE+e>b9;IXlaGP+MT^=GRcZkBvj#JTe*CXoFRv~27Al36 zr5aW?W)~+7Z}Q?NPm7@tiRasV?@w+vFgU1V% zdOTlMiXuwOS}R_SC^aQbby&<;oEn5#jmS{P@+esfi6(GSU}qGlxF97jy@h(Myngz6 ztT2_|^+xI_jA7DmMk2e{!sQxRQY-1v7muzg)k?x-nXp*HT9#{?`jT3qGB#YTtx5gP z*U+rU%A{S%e3WNe$ypV|B2S4JJ3;m&nRz-AmVLZwdYVPs&hM$>x=4%4AImk^KcTJtb6| z&jzfN@LM3a5`}^v+nVc$iz~>hLJM%TWhx5$-&DF zbt8wbNQciYRZ6w;(Egp(VOKUKZ1E`V7rWqYgqK`^GD1ZKmMx-pe577htS_P>%TOJO z9@<|mSL!Y7Pggz`<02fpv=Crqi$}_61*e+4w9#|4xL&B2hx$hfR&$B+kY2**TB(sn z2jYP<3W)1=y4u^8D*=|yra*dMQv=goO$*n0nii^dG(9lsXQ>cFH`5utml?t}XTP{z zW#pbj9myWb`k_6Tbweds>Rzga*(g&dR9HhFRKiU?Oab%`rUY91mqNL_mx>yCmkOwz zOARyhEe$YS2u?Mjs{<->hW?j?w+_~|-IaFihc?OES3tCVj1BXBJ@>CKmY zVjjyUmL~R^8Wv?Oj9nyCq9LNzosBrJ1|oxSYS%;8l>o1-ec8fQP2mlTMm4+1qGIC4 zC-&)#ir|oZ>I)9OqR@oRP>8(h@ikdBurWEQO0&yJYZNVOQbA~S;@#*Q3AX&iK!*qZ)g(DtLO6#2t~zGlW+@(eH+Y&qx~pkM*cBdbe4t8(b;BI zT%{s9`!Oi>IJ%sASoC=LB&Qz#C{ov^c~L4F)*+qcq>DY6i1e~6L~1|>0y=m=C$>o1 zsIp@ve&Lg@IkCm>TnoUjM|C?x=Q~3eY4g$!Lq?kUCDTKt{872cK9o7`zzi5%rro#w zJMuWoIxxes^_B$dBV0aj5932*Dx3|v(tcV3m^agsaA~kfepGfUq@U}?Wk&)eeNrEa zOpKT-CPCUZn+TYlA849BucN2GclLtWdF+FFn-Wh|BXy?uM&$u}ww0^8H;4ySw`4_U82lp-NZbx%s($Jqzc~#erm1 z7kh_k>G}Dd1@k)R%~{w98tY+wA2t=EYeBxNuWN31|AGbi_OUUX*=*ZycH8u}md<6( ztutn{wRB*AtyFJo8RY+;)e_f7SAV{9;hcp%3p?gD5Vfyo?!3O)?U_@ZyAZWEr>Ap4 zZ(p415M{WymS1P` zKpN3JfdO!#gI`LTNgjhjm(f;)c43Ci3{tZbOcs(@ zS&d1GN_M0jS~rIZgK3L)Pu#+EU6Cbr5q)PW*b!y$vlaq-k`wT)s6gxnOvH7QGZvN?wH9s!LS(;xCQQC|Jq?@1rY-|2FRF~4* zIC3Y5pa;p#p9GtmAK|X%M{uh7@tdLf=~q|tBiz^g3ZgVWLX6Gdnzb>-%4-oW>=>3S z@%og)^;&fX@+z0qMQpv&CBj_o5+GH)^s7?!^6%!#mk4|H8zIpEQkd2RETk|vRvj6y zm$3eew?Ph`!}cSZ*}bfVVo}~rcrLb%fa4{@f1k{GHV@0QGGpi+b zAey*=9ErA8&)H_qiBOTQEM?6KcHdHNc~dlm*KI&TcNg3vG$5p2aA`n5@*54rPOL*; z?=~W)UpmRCL02&{SQWa8dch%ET*c{RN?6|WPDL!hJJK}8dEY;rRd+Z3!0s~Jwr0-C z8dH7}03!8@m~7kG9h01*bl)sX5eEc#%5cE!mK3jq{LBC@F(;9j6MJWC{t-uhmH?ON zN+i01B;;odaEYi2QILRIL>#wsO;wZ|Px8OCB^jbzl>oh@zX@+_N;CyEl$60~n-Vi% zo06R5-5se(RQAM7qd+Px6O<&iEU?976){*iQxZ%=37Ll!Q*vgqp+wc;$CQ{#G?a)m zM43{Mf*X=gx{E%BnNqXUjU}#+dB!w#D05QEvnQDM!&QF%f6TuF+_*Mas=3qxg>aBt zLsVrTO$jTZ8I_Z^qRa0oX*D>Dwivqs*ja0*huz8O zz0Ct>JtMOfr?HHF5s)M04!#I=Z(s1y-Thbz}N$lDn5q<|gpk4xuf*3g5AC0swP~54;hh!HRIrtFK$h!x!;vTi2JTSi=sOxv?;X<-i#vVO9y2YJm7SMco zV0@b+Zy>tl#lvIUU3j=g+JA?~)tq;D#H7_to;!n%$!&*4=RP}xwcYtc-YF=)zS;|p zmh$$2$tBerx%!ZZx}VPwCwB6IaTE_9#i6tFwPf3b_lVS~7qM!TyPoJfe7YHLyRcuy zJd@T%k$m)ci;lw3>UD)$acp)KPkyeK@xbernax=8XlFbqL0X~F^iwrAE{-5%M(PU9 zY!@+=9zQ6MNnd&jcW5fik!49l@_g^fsB1CSgK5BWb}dx2 zhMi{nxe?9Q|3g(fjY?v>xlsi6Z)RW4IBYvtio>oDd(vV1xl$Z``ddtqaP5L28LDr>8QyxPuK#OC5hq`PYUh zAYNs@eVuea{M!=;{Zrq+j-u;9ekE;^lhhfc)G)tRQo(%UqljsN9yRngDr3CO9Tiad zJxn9s@76T&&4b?Y(m9XO8Qf` zoVAh0@kk_Xn%|Ua5_Zieski@nim3#dpB62xKAF#5I^207J;aagl}Re;KI~KzH$TP( z=;-ZIe&y$rHEvt7O5^q=t2At5bFpiP`zgk7A+n4|Q8=nhBdwMdyZ2_kC}B-xe)yU* zHRCfAL(F-gFKMvnTsehmB$mXskbJAAog>)Dr?738q+# zrOFHl|KyLCmxa@+}H<5F2MXeLx;3Eg4K57G^O#(Eb(7R zQ!8fDE0TqnBb5Zo5A^k>?2%7B^_o@ZNc_2v)cJAHBbl~35_LT(lBZ~%2wRJqdRnV1 z@zk>?vwHIXa%!ncmwl&vr=FuwdJ9R$ZtwjzJ-5rC9V~v%opyS>ci!8bMz*>Tc){B*+?MYH8Dm(#UdvZT9 zmd3zkPDCW>8Q!r5tBp{ZvZhZlT%bT~tjft4i@TAn)s4)o@373{; zT}E9gJX|!fZhar!n1&tCkfgqyZca(3!V*w!PU4-IZ_W8!nC-ZMmN^?1k~_E@dH-Hl zRzm{?m96@;q7ob^nY6KXrxR7D<~I3-4qx5EImDa#S{~(~ko*ar?ctlH;_dx_T*Z@v zv{W2q&lUHE@r!=hi3L87G|dTQTHMRTj)fUPTr-j!8saa&@m1M8RDnMf((%pZ)6z?vS_8&CEQ~KO2h*}5bqfW!ZeJ-KxkCcC=ePq zsdi})2#RbN1G2=6PyU2D55ou`(yP{|V=p)!9_W4=+#lh;%=<-OZQoxaD-2aNZJZrtxdX?USu3taoN8oYo zg>5I6aA)iY-RDZfJu5q9bD)psk=8E?K@PXFlHcURprt&c!{thm-GDiVRpuecPgqh)pI1_mLN+Amq8CKVo-m@r?~6y|E-yVPmLObGzx1DH~`& zSgvZ#9+I)0Dwnb=!%@4Wi!W1}q|`AtO;I(Oq}+1ap*f7q$5g_VrFwf|a1ag*7xB`M zr=@!Y(@zxO*I#3&%PyKHLSov&svjYAC~he5XH9^XeA#6TnX*Z(UDdIH_mk8Z z%l#JBk!sTH0u`!fHr=u+OweA()H9{VvlyU3%V>q7BLoUE2}?Dz(HD8sM`opTE&=A$ z8x@FJXp?dgi3H^&sWMxSVEr$__$#rZc20gzM^Ex$m52@#vkG-soVPwSA@l4|4B>{x ziROz`toZz+BR^EN#+|I#Oe7UwW>SNql$);ddb}^WTHFA0)#keM**l<=yY_^0l>Ie{ zTTGo?>mjWryxqOOefE-p#oZ{>z>-7zv8@p8 zRJ06m47xmOJjBY$Cb4yYnbdBU=z7j+6g9{1E!0+)X)uJ+D^29nAu`=@??lU13SBRN~#i8f`Wbq;;~WA33&|T1NGQ+(ocVC26o{@=!U( z*Wk<_O{z3UBX<)(Y)ob*My$DkBuzJ-w38e~@#XW?XQ*aV5nND*k7v96i=Cf zQgrLAS;}CvGAft+2`(NVq(TyyY~koTXVl>&{RCvEE zg_W$=>Q^78Q!+acV-v?@*_Td|hNt8v{+Ks^eXRZB(p z`otD3YAI?;b2IWj0otlntF$~lc& z1DWE@#O_U|>Y(R-l(N?YYqlP3`OA7_t-5Xr?Ou=hcL1dhEiP-J-)bAqSv6Cul17x_ zy5liP+gOVx;fbsaJ8~;y%zg1oM%+`ysgb~{!dUP?#UHm-u9WMJ$7aQcl3ZML)tN>o z7l-;_58)8k@;zvDtvNt7y38DaMpu{vP?(c(oEOLSlPmq6f|#7Huz|2#2oEZs18yXK z`f74O^02+s034pU99s;QnIfAVebXGdjn182v=b3nI`jutGbQ$rU2HOk^(3tu1;-QKlg()Ylad{7c$9deqeP)sMQ0q( zXyPYs*CFp7RWJNKLXbDvE}6>>OT%DKzLe5Y%<0J$W*zmS#AG-wQ`*Udq{J@^@!Cqs z@_Bx_vKBj4MO;9~M3T?DSVov_<0)cn7YIQewQ8X_iUG9LU#qU)kk2p1C2%(TFOT(A zE4|gVe7h@@iwh+D9!-11kUJKys*rB{cWg!QIe$da%$O#`4b3#U2wpU|I&<{6dMLJg zGeazSsV@C+vLt1zbZZ3DdWpqYQ>v}hT9M{J{P;noR4R@w!UjjVw6-K&_o8*EK8)~e z^D4>`FDZd3u9zTaOVANXPi?eXtJCzD`vdm;yBbx8>?6p^@E(nhPPXkZS{ZznkAfR#iz|6mncnC@Jl2m!lZZ4ZW{O$G8g2|{DWjoPs^oM= zvCiU7D57U0!-IHmV4j`3k(Q+FvhQdurM{>@mmfrpZF&OZW2**O`qJCf_-cTk{^t|p z$Uox$Y=>erAQ~pgQZ#m-UPv@dn5Ag!9=(ugm^@3-c%uen(l?QoG(9N%Oh`Vpse=53 zT0YseWN|vOOx)EqVob?-;rdhP3@Nj9}g>et5 zCt#t%lhKz9YW}s*a9MfUrqziY6fPLKH`6*p&9j5dkX-ucs+LL$2oslQaTvhDoFBTd zJn$t(pa+EH0dce?NmQ~_NQj&~6-_dx{0f;`VZ#y}=l2XWG{ccbEIhxeeJO^gMWwOv zk$OC^Nqt)E9@BPEt%Q}qTID64@~{)RbLPlBEcSRT9k}Ls;&~Vy988Dt!NMVDs!%>Okzw$94iQP! z6BkK-h6n~N{!S|ljn=~nw8(|C7Aw8QQIr}As!7O3#FhedeJe0J^Owj*oIiH;ipJph zH`%4Kl+5)=JND~7b*}$RU{X46}sE9F~-YD}+ zv+FDUDB-w#={c3EE;YoVqBV(l{t6-R`sv~qdDCMG9 z`I+^OiF32A^OUqtL%RpO!V*$6F+X^l{2Z^?;|GF8TPRKuT4~XrbuDx~W!_ri=_0Y1)e4OCOPe2shiON>=cQ&Wv4Y0UqR4sBL0T;v$>a zHx|(A|Lmt7g@J3$7gdrwu4LO;;xogAzb@5=3qv?kWU`+)18_xfW>IUUodON{FCKaqVeC)JgWHP%ZCR!%grs*8|?I1W)O7fU!VD9-7iirHa1+N(5o zb2jRun+0F97dM~8PM_`aG6CCxu=M2xF=ECCJH#0>e!xt${35JN%k^4tQUt{vgq`omb`SV)K$aXnG1)9 z(H5vMOGk;_>axPfIPKiW)e%h#dih}^s2q|Cjtq_Ye|gYLjaQKxtr6lEtVZ>u9p#dG z*@{w)PNAupqDwojX(pS*ildw^j?G>JI5e{ST0WN~P_}OnrpopV!qCt%af38keRM{I zU61kAq0O-2Uc)k+Oh(l+BH821liA?p<$003qa2obId(Lw%96A`CM27}!Re>>1A?PU zb9?f1!SNC|X4(e`mq~58hGv4V{{s@TpAiWvE^JfZItWSBupt{3EveXO%OD^gY%p2I zhSi{m5^oiRr4l<=$ymlKm?f@WR4No{)yB^YvC){^H$QZl-r?tGG--I_(SxH!qvCjl zF2FZ_IDp3wJ{}N)N3%3sza^LHh?1VHMR7)l3T#VV>X(bzt!vHtyEkG_MM;gS7s(B? zCYB?HX}7-Ud10e3(KvU4QNC^304?>Z!}+BHedUq-SiOi@YjcbB%ZZkO`5lP_R{f=w zwZh225bXjKum>>EHw|+ICe||0=SAD|5<4(JSK{&X3I556e@|~|85|m#F(dx>%wqH4 zjOOIuLoL&bGnxuzJ)~53`=MhiJG^q*&<8J0(L&X zt=)dTf9W9R4dX*_JC!0{RZn-!&}PCMp?Mvh}G&d}-3&{j(*E6Y&)9$s?Mw1FqP zUX(?iK*XIIP8^<&+9^|fX#x^O=Wn3I*%Pi!t2tveP|XhX@%(V0t1P!HvJ&tRj?`qH zTLfe+CFN^>sv15NAsHObr=&ak&}2#;s7{y+1+_%?kaUd{R-#lIDaJEsVQ3j+3qcE! z;n;p$y11U%0du}zrA!m37-nHd>!(y@mJB{vQlAk<+0+Hgm9Vpy>4G!+Ocxx#AVfCl zs8GnhAvHNenuSCWc~{WvWYg2pt0*dvoTE4u4Mtf;aNLp`l({>R9Casglr6%$YSlHp zr8U(WZEqXo6+1lYq(`7)*md2k$uX(Q`JxN^jR%4@JH)@>hDeB zpZo3KGLr`#K4tSYnz6Pl0yT-m`cTWUk|L|4@SY_3&k}W`S zd@xgN(OmLnfkxs>mj%M3!<6D>PqZ#?EVfw5WQuIQERab;U9@D1Ds4YzikGyuepw)! zjDA@lIJWWv6qj|{E(-*vq+J#WkENU@43CynEL|1|j3<_|>~veUC~Pk#JWA|Uol$rv zieDH)3*B@J$&ffQ=!VF(@=Yc$$1b<}5`~^PpY7EXCm_9?+nokx-sDTeqZ%A(=E#y4 z4UB7Yp$$Y;c7nXMjYQ4PGdyM0bB4#0+-7*Bq-*OwGlPciFvFrohp63kYIBt#X=r{j zFpAo=ih9n~R_>yUWe(V@i`q9Mzt%BfvkRb%9RvN&V0FL4VSTkwJhVG9^YUttJcx*1kZtk zm$vsU=~*$SbD(2c_dwsm&N&0^ix#yXs+0otlku5Su~Ev4A9mkx6FWjhmj#o@2#AV~ zHjMwf7Z{O}?ubR7|F#;Jubhz&SnkH`1}H6l6d-JcwB0c1nXtenNn$HA|0$? zzsBO!&di`hhWOJZsdg!ZipF0ufcBt^0PJ!l0u|4uq@z5?O=?B+K}RKOj6~f@u_5&t z4bfvHr4*Dyp-fmTjV-G{OH+J6S*kEK{ zj>NQaBjx_xQ9Tpdpvaa9ts|~)*a?hk7}nh}&Aw1JWOsb~pyiHdnM$}L**kuChMiLp zd-CcyYvV#DwAQ$)gAXYY3|(>ifpL;*)F-sIyot#QTknS?B2R7t`Pi|h_-NvT(#j(s zAFAVxG@Io+W4o--8PRV=QFOWLG{>Y)Xj$EBv7(8k7SZg{EOCQ8OF&#-1`H!oCz=1c@BhTZ}$TTBWk}x}36JncIA{UlvrJ@qg*_8WN z6huxzpSB?tsaGh`lKgfQI-mvu+&9 zv?ad*Zx<+*Y9YbP=~-=5vq=rkmZPsohg1Iic{ z1N3w^qerOM7-B1aZx|gFA5@qUy zilU(pD&eLcrT}^eQv$91OQGD|OGWWu%2LfycCB-%kqv!I18_eooEF^;FKy0fP3Y=? zikzYUCE+;1t?j?i1HPN&eKR21PDcu{otGEOYViEEn%0B$3}nyn_kdy}0gAnRN6MBo zT!q+7089Vy;$lyM<8!>Y*jnItmlsc}0-5m?5`^PKDtozr9r5M_lXdSN1}~MH3`r<4 zQso&+v3x4LVNqs0*bp-Ox}IgL!#i4VTqNkjUE6L*_bS?K@z~cjhBQ=V^Q*>vMiE*h6gh&coHD# zvieA6V#HK43DP$BM8NF)K-2Vj9XPgh2vxcY&&|*6>sdH= zZU^18E9+v{GA%tn-?Ly|=e#)!J3$+aAr+%*LB6Z6Yi@V{f(7~ZF}ee?ZNJ%V)7x4) zmo>M}n97Cy(4-!(7#Vs`#4U?%u(~dIy zU3Bku;4R+33~kDvoTaKsnG}=gbc#B|JG_ z9fXS&jv|d{4nqTIWMMlf1M|E4_h&7OA%|`CvitJ2*$2NG#&5Q#yY}fEg?4R;%`dcQ zG@%oB@>8s=HYY{JUa9FR3JQ_B>|hQR=A{M78=-nodVn$zCRyEJmD-3eHPId!i_Ps> z(H082DJzWGiWNjMVC8qkcGVEG*(!|PViioYL=o0JLp<3bgDvR~h1i6sS#42I+G3Dt zEM=7rMA(ptknPhLo;Fe&W=$n+u4xIK;WlgKbi+-9X6sFJk_o2+6+1Qrn~gaQ+AZ3} z3Ll(CG|T5eOJ=KWY0OyNPennf#Wdv*#a38A+7S8AHv5Z1bt&DFqLBg-^dQ;Dl3=rK zA>3tB2u@iNelr*l{pzwCg!{}zK@=-Nh|xHvXEu)MjTwjgp*RS&7>699v?vQm8wdZ{ zW*l*-E~Q&QWE_Z~2g$~f1e=Wm;V$DqaLPFFo548fSC?@h+-DpLq8JB4jKw&yU(y{eMkqC3MNPyHZ(yvO>$iJH#M;Ci80ls6MyRzfGE#hV!ADEUKL`@0VvpewzF z8f_6{Qi(^};4Nd-A$r)G?S;BnZsB4gJxhpRxeJMa%Zb?{;DTbd2)Lw}Edo{;#*P=A zUe2tR*nw!`2680YTE5e{aTVzzT2>M4tESxcrf3MS+<=7HBQzkSUR!EFK=K<6#7?Y3 zUz9f@mcELV$z17zO@;{QD(bbBY;hH*lPO_&dp{MCUWQ7Ooc59O%1WtderyArRX1KG ziG2zFb`s{StTE*WIUrK6h{<-?-7(22O1C|;6miUgrwj+oZvF8}$d7#B5_1v>_FhD< zg#0K7F42`puy-VSCFDm$aEYi2Q4n^W!zB&lVAEhejo!NQr6U>ZuuJfxVCGm{M^ zst!M<#8jf8M5H0gl!6r8kbKfz^fAnonw@Seaed4)rl~`jlTscX!n_|2H1Pjp{vF`P zwZT%&r4}fJgWMXTDg$XsSP9LjoU|34G)PIS!CAD$2+sEORarSiCnQcNIa=QepoG2XOjnmj7iJm zLH4Mzd)K3mj&8tX1q+q2;c9ISPLw21%Mh=xl5PW_ZL`687xwJ(xEjvi4~KuRsTTRa z+4^y?-Up?^2zJ)+4ktWQT|x)OD@Tswg$T6kmO6`trR!XN#;TbmG+rJl(v@D?8>Q#C z>m8Aogs#b>YK&f$Z}idQ6YcTWId5B+pGgNR(1INT63(jr_3C~QHaw0QuHpV82c5bueRC8QnqL5L+ zI7w(sLzy6Ckw9NJ?ASJ{5Kjy;3h14TU%$y_JSd4iA;_2uWipU4Zqi%R6M?K!=}ABa z1)2Z^}b$V6PXWHd_~FD5r=fo#GC1j)*1=^hp6%VJNMYDwsDV zqq%7yBv(Js$402IDBSL)Xz}Y`#BO!U%||1x3l#VJX)lB^C`JxGL^Sg5fvmXGFDMVp zuLtV-oqD*CY?ZM`507qf=a~gGUmh4AwrX_b4Mdl`czA5P3lG;w`|t3$n)42in6$dd zb7#;ox$Us%+-HZdwws*D7Y4=GS9`(HQr7=t6FmYL01y=li)C_!3m(o9x?CQ2B4%?fS;&@As{QIURNnQG3e@#$7ieH#2 zog|VnZA5~UjZ+&v|0XDly3}Q8FG|h05SJOhw(QO1oo`9nh-6ca{kM{5SvVqsbZrwU zUERV3rJ+x>bZsp>NHg{**d|n)4^<%t2B{^soSv2GxplB%X{qCnDgW9KC3Zrc{*3R$ zC#Hsfdvb&Rsc*$c(e)s|k~UvU>I_n9m|rWY;AoFt%9j@CQG+c|8N~uV$(8bZn1-0> zr8M~Oehq2jr)VUI%^}1;~80G#?tW6lxh-o z`AQfa@~l7jZIe?>CCL1A)K0i_BzaV$J1qrer|sihBPjBd@!ghL?A_VhrToedtZUr1 zWR=G4OIB&v#^#m^@-yNb4WN-$%ZlB5GhdXjhL)bQhZ|AGa0R!F_sly}tCVWxq5V6n z!%_rmqLPPc9_ULN?0;LjDWkTentG~WSeaANvX{J!?SY{>cd)KRdl;AW8sVZXBVSUr z`r{BCY3OL?!sr5eE`-iQjd&u zB$#69)fMs#2>;~I8{}S5nVmRv6;AT1(t}kUvEvb6jO4s>V;>;70P_Pb9n$6qR@;fw zl*Ti&#D5`8t(Zx#NJd&mDhZSy=<7|{BOi?Pnnm;S6%Ml;{vc3tdpNU_bY4fIu1AOR z6wMQ1Yf)2=?{y`fdKhWQ#6_*zLXFrssAUXdrPK znRo8Q`|zzOhpLWBT|5dR`@tw%$DmxQxklwELfYxk+`E{ZD}qSEirq4HDTF&mEi7@1 zszltSMbr*dlK4&AsFLEv`@GsSW5unO@vq9wd}{7v329m(Wg-4GM8Z)9NAzfeInJ%P z00px}9mK!dYatSd^Qs8Mzxo9n`AX!uI5TVl0h;%bbX0%&s&fEHDX7(c*z3+7?NtV4@mGK+MA2`T`1+X77Pn=w({AQ$$}}7M*?nB$5!i)qaatuP z1#v@Gcna*2ca{`9!*<33n#ON&i$Yi%@QH_M=*^xJp&}2i8AXia=O$=GV`O#-%LtfV zNE_#}3&;an_SlJ=(nq$eW`ed!U*FA^A&fy;B3MV6Od{HVk}F(UH%J+>38S-Hr5JEK^<3S@5>Tr-j!8saa&@m1M z8RDnMf((%ptFR0OS+r8?67DeqCE|e~i1&;GVH(C^AT+9J6bOx*RJ$|?1VuKC0a@b7 zLqKReeFPBks`csE3yuTn9v}9sJlcP6&Ns2wAQY=~DOh3HMG^k?g5vn-NO=f{g!&3= z=q^>mIcIX@(dCg+rGV4NxRn<-tk!y~^(t*>>(>wYX?|RLVcUr%+~hk#x9rj)iX* z*X9!;F*{;ak(|27XOpUw$EsLBjFyKM(MiS1$}Suns+X&k&T_59{=%}1pfUU?s-2R+ zKqL)2wCjPKbri@MlecmVDV|44JY?tzFfzf%lWtP|p1pHHvD|>^c~# zXExpBD@@Q{$7Hus<5>*Qpk=f|(Gda#xpA2-fDQ77~<{KY; zbmWJsmU=*HJd4dlQt@RbB_idftBiZ}`tS-T`b&NgRXSE8S0^fjf?6Uc*HvDRcY0Tg z8{k2->G%A0-od0HT{zONk-|ziQcYewhXB-7zu@fT_3J{VF#v?XT9W0FCeuN}D2a87l(Ob>=V8E=7KY2*xfhOpPp)4SJ(qZz_ zAqr;W9$t|x>L7Lx(UgO{B72$w>Wn=XNXZS`)KZ(W8R;szuyoGmaH%>`v2m z9nC1X>ChZhiz!E0QY$fsk<4sT(Pkq-TH1^Hkz?JjbMY9)4#5Z|~QM%m@ z>r(EG7FE|FlhQhjvZxIkQDUt7>%%JhQT0ADC)$MlBn_*w=`XI1tS!}gD%g}Ataomx z6xNi7#+WxESsH%nL>_u*o$kL#;K&lRe&ef7(}nt|giFgsdh`SJC}dVG74Au(^{!(E zMmI3UHZSTiYHhkL$reU88`;7J_{%QwjK(rMnx02#*U(cD@xLJRr+h>mI;ttw8qzv> zpj;`Ihv3#47VqIZ&*s}jSlKJ%pQJm)hQUUZBX28-)f=r?Ij3=J zAXB`V*aQ5jI$+wkl_hgMux9Jg7Tc`P)~f54(3bpIBm0f)Oc1)aww0b$Sn?&}9Koh* zrWRL?C}Y%!heK_DFq;1-vNG(b0U6UYh4cF_NUA$Dnmkt`REas=`?CIL@C1 zSFV)njz@RK$IM(@bdG=qZx@I9l~1O4P^?*lQip1Ea3CN9(V2k&6y3-;4H7qC1n15) zCWV&`vBmHqpX_cVzWKnIrxnmYQuCAW#O2s(cM7O~L^e zx60j)nR0IPnf^?~F2aX;F8O<-bB7#l)C86e7R_p=#GU}nA8;a$Pq~ay>qf!xgokHS zzQ7!cDDstkUsWJVJj+v3p?9)3GMLlkSloq0E!^6mxoV^JrssG7pFnli_sb#eC+JqH5=-BebzNolt~_rlY$pXK^$*Bn^J; zlABnniueMuTv>}P&>{|#Uns3| z(N!Mnt5$leYxzEED5qOC&6dSvWh`E!{2VbDH+^q()FCz8i0T z*E-e2Kp(BO+5Sg_ch#zEdP{4nHQN0*zN9^hh!?BTjIDu)XfCd-TrJ>YL#s2FId0RD z>djjBT)4XA72oj$?{N2_D? zrK6(5nkqqzvL-Iw3K5Ju==oi#C5+l^BY`d%^ObOVhC|P5;%^HYO(N19C{xTT_AAD4 z7&=Nvs^oM=<1NXEo{bC-;>n+RJpO>T8smYP9jF+srPLP{sJl9Lv&5cfU;^V~s|Hy5 z(wiOmK*Jw;!Ph~o-|>Nh?bnS4M8ld$ipFlV4T*;Jkra*HWE&Cu*}xN-fZmcoQ&PC!|p8TDl%P#*Rl52*2MM{ZXm z(13U}!?9^c;o;J{3*#PAF-m0KLWL)z&7QRUYoXz?^1NBol!L+r6C2mBHR)C2ATuPF zK6@_NBr4uGT@UE5^3)RpSeWxe7nTRUq{MnaNC6Q?TY*L;ONE5Up)M$IV!0SeDZfId zR@krv_v3g58g0bF1L)e9Vt86q8XF&}#{-+xr^U4tn*P;FSpKb5UMMUNJCQqQj@-jy zOOKT!gq4P~Ks*}80`X}03dFON6M09I`-iK*q@k7cJ#{1sS1^qwnOXz65E}A$kx2r^ zYa2BJ3nD8-u0LxQEUrDPjON0#Mwh*H*0_l^SbTPPZKmCAmdwOXHzYwAkippo#x!}> zz^F-W@q2iJU6Am#VvjFtG}&>7hn%TG`Orj$!Rt9hBvnsbB>5R47_`dRXcBMLvmBPEMJ}ARScol- zqSR1OO+q#zHq)m~oxteKUt)xg^T)2#@-qtJH`%4Kl+5)=VPZI+iU@|<%)336yGD0g@+nrmyilQW!j*f0hk{wvruf~oZ9)&qRGFDo$ z3Wm9=IzngVQZ9<+oLTRfIFX(lKTglwX`hC64|s(oq-bJ(q&@jLEf8&?I7O6`XvlPG zoMV}Qt(itJ-r}8wHKXy_(9|=4xkrdf-8s0jvsPFq-WutyA?19GI5VT2++&&3EDHZb z7dM=t5$!&Q-Q{O*ApSHzv`};}h^bbTri=_0Y1)e4OCOPe2shiON>=cU-Hcsn0iMKH zsBL0T;v$>aH#}#5g@J3$7gZ9y#xyx~Y@Yj=n%@~eyh*TqMTur4jv$LZj#x9cYsYFsrX z3v*?b#Qml|G~+^s>GcEL&iK+yj}naq>BD^F^hJ4CFAle4(dk1idFfcGtA^XF7Y+}j zEl^>WjuN}oWrdM(+PRlz6}%Jn@`H6yIV2Sv85;Bd@}QR*ucYZg!bSC@9b1%o*@{w) z&Sa{YqDwojX(pS*ii6EAj?G>JI5e`j2bZ1Rb4dba`vzgEY|kJJ4J{KhNErS25LQQ( zqI4q=8GTq<7^jWhCOT7;K_}favgATEyLzT5L+XavaB%YS#7f?h4y!^rwzRPj99bV! zl3nFsiS&j-a8zk=5N|R8P_Zq@diM_MbPU96!GgmJv6^gX%Ije#p-Z==|Eq3BtKR!V%po>V*PTWWng|s zB2li?ODk)Ik%1w)kE(#X9R~WQVY0!*S_b;OXnS5_2L|X;KAu0rKRNO5=`AgTLqjuW z#Q&aIY#yA^ocw#JWqNT&Qy~r?nn|Bo@xO~h^eM*wF12d^o<*M|{;-z*aI+S!#UI{J z3!ljZ;`D}vpjNKd)W2J2H4PUBqj;@NL+Zbq3yN-Q%MeQ_;%79s&KhnRipw!$c*Zb& zqVU0@T2DhwYI?&FKU^3b8_rGHci*YXr+NCUmKpe?bwB0jsZHXa`|lt9e)yF2`?ns} zSsEN)d6;%j;6ByCBXV-6;qVe;_KjqPs4ey8rl$QV<>uy=>8-P7fD^XQ-a|5LWj?Ng*|Pg@)XtZLpY_gipt zyS89IU4{SUbK7m62BjKrLNbsaUV^OxH&qvZ9cDan}O?1aoZZXJ`;xsvWsk#2c_aScD`UuPAw$9~NEt`;AHORSx5fXC=mFos~dTB!LS4VQLo49SEr?tl@ z3UXC_LT;zEoTESU+oC^s#=uZ9c{sm)@%g+!@^4j`Qoa3C5?l09^OS z{d%KNe!U+G#-%p_?fVOGzdq5gx5Y`Eaq0aXf!l(c zaI#--Z^5|qoDN0|FfKi6-!FnY<5PaUZwtnyN9DZ- z+)bzW^&Sz7Pwx-l9{jXl@85!P>5+e#@)`7BeCb1f+QyGm4WCFST>*xJ?U4rrH zEe7|V)7^S`h%5y2Il@WNER)e`(aJKwW|M)JL?_TcL`#qTVT;a|i&DTB%X2z9%y#X*6 z3C@IbnL*z5u0r7?}G7N3<#3 zEg|p0` zEi`B=nCI^Hr+dIX6LQz$>r3}XVA_A+PIpISybR{!_xjWQ8JLdy{OKMJ<{`lmZE9ai z_cbs({LG*3FqmHm&Q;I<0JHjjuIEbk3@}$e=uh`wU`8I|oGaZ^i1`KQ=ucC5$)5KF z)ATFOx%$y@VE!UFSGsTd^@Q9>_|nIg?lZ8fYr&lL8-Kb_fm!xj&e_tPjq&m-o%sC? zPfp0~gD-vJ{AqsZAcV~n3(i2u*UcLkVB1ZVTl7lZpc zn59p<^-czN445r`pKzx9y@~?956pZ1z&V>;^+InQm^%d*=TEDbE5JPr=3~#g(`|yl z6<~hxoIl<7{Aoh2jxT*|>CQ&jC&BzkaB;h7`_DfG_aK-rKcD2!)E<8UcORJB{>-^4 z__wM4=n}*pFHFeo|5tZ8<{|#cV16n%TRCYs6Cp%ED)T{uFe6s z49xR_qjXK}u?oL${>p^h5%|)F{xp^MPW*m4m}UP;IFlaDn~nwZXTimOS1WHnGXBO_ zC*(f-Z?31bhvfg>1HE&>Y!qBvUag;>1n!4m7QV*yZ0Qyuum;S}{^L%U{O%ib6LU@Y z(#MwW@d*0>m|F!$w5k5?#qZC9xn(o1N2#0YkNoZvVD{Rab1r*15X>J0XVd#E^tRh# zV(vnG>0`?u8Rk#H{B$DcY<`#g#?(m@b4TDypE!S7d-NgfSTOer&ek5ZzxFJc+b459 zTRCng4$L)Ma&9vIZK`M5Z~7~kC$@6y(Regv3TN9owOfzoB^QACso-M!)B4es;C=<>_&2)s_5pVln1=;t)1&ry0?aMj`1PIu zv+bKWXVZHGdOLx6QE;~QrTp!>?Zn&yeCcD;qxJ7HFdf_Z^LGT8a|CD8ql7L6bLsYe zy&r;kNpLnjvcJvWJTdoIeCgvV?@n)-nCr%uJ~lln?;rvNsc-k|eFMysg0tyS{+m3AUL~yqJk=|M`gYWa}odV`tg0ty83BB9F zT)wwo@5f+X6`V_N()%aop2e3wE`PuMJ`;0!eCgxTn+Il}ecgJa&{ziME{QYEUueJc zc`!Rn=X$nz9nIT^!TdsS@qA62*HOCv08?sB@@Gny_J=+T=Bye1be{sVY$oSi>DIwK zDLATUQ@XU@x%DjgjRXAYo(X2+f&O&g3FZvJ+0v!`&ToSm%lp&4159hXKix%OZWo*_ zUD|hi7R=^z{OK+NbBEwu_53)PgS)t%E8PuXKHuX{_i-?b=K0Gz3g$7vxzgQoKKxLh zKiyFpatX^+5c7ADAhJay{Zq{gT!JyMlQ| za8zEK-X1F^<_7Skk4^6$gpGmu;DW zO-r|#GBr3c*NiWHVopn!_J=+Q<^jP`IpTCFqWJXS|Gx**G^CYR(`!OPonY!k&MEC7 z)gP7Pd@$b?T%13x9B%{n12B*2oR;oJaLk((ySftv90xP2%sJY(jq6#e7qY7hz&tBBn_W@=eGSasN4U%JNpSmv zxlM4ka&&^bAIuJ`xn7*ER?pu8_g*kh2u^8Vghik2@s}whTr2v`)ZeK8?gH*f!P@j_ zA7tw_6LW3&(kHeTEq~V`tOv}?f^+HZUYVF%g0D;ORs?BeI3l2nqTiMF!u<~rbp$yAI!;Pe!Z`P zd0cQVy+4AvsP5Oh8_X+$v*}U$P8gq<+lViHT|^qOl)qns zyWm*29{IoTgLz4CuKaEOG3@K%OCOiLJOSpd$8pZ4NBws~Pc-Y}SR1!vQv`nwFw zAt(9uJ_hCn!P)dEf473EpX}E=AIwh#XVcpVyL0%m4F1YKrv9-JAuoWt?o)0(nh!k;X3{B~v*qs^aNB~pRd6=@BfTfVZ2xJu9+h_& zFh3WZOYc=M@BNHhkLE9}V4f75OK4-*sSCo$1#*4a{wVv*}TL+yiF)S$@5X!TeZo zHa#lu!(cx11;5@+V4e`1OYb=_7oY9dy9dmRg0tyS{pHTVelfoEaoO`@V757zb2hz= z(AW{o!-8|^<<7%+i7$O@dQ^Wi!8|88m)={xi0h&F`t%kMb3W%>dV7LdCOBLE$X*Ty zv+V_by_sN!1!vQv_80}T=Y@W~elW)h&Zf5!dY=T-eUV>p6wHN!v*}TLTnXl|i~V{h zg1JF(Ha)7pTfvN6;@3M9%|kFHCe0_OCqIHz34L7eDAdQX5k^lHD} zr@@?YjbHC~U{+k~*ZT~ZGr#KBdlJltzUJ0@3(EUhFqd5C*ZT{YRoA=q=-k73V7_sK zUvJWl6LZJlOCS2v)E<<-uYtMaCcoaBzdkW{3cfBqx^90fn0vqB*W2ZrXg7RadV50e z`(Xa`Ex+D@H=|$T>(ZMFy{ExU`nF$h8JPP7N3^N_Nbf&jcKeQBuL|aA!MXHyybb#* z-}UQ#63l-D=hAE5i0feA^Xpv#X2;t(=hB-8=7>A|dbfaSzSFNa1m=YA`}H0GGw&|H z-qB#rzuT|(9GIbd+yyy+JTXJ>u8%D#@P~=H zkK*guvQ%_& zfO|=>w*1`yZtCAB=I+OrJ}?Vod1<}%2$(bf;V$n3;BE!;xfk7fl)rPqEd8fn?-(%s zFZuOWfZ5??zurM$wtK~|w=|@e<3?Zlg8`r^JbL%YtcOICh1?Rec{tB2I{=@Zb*W*d=E->5Y=tO~ZzC^p;eLlk8 z4d!-p;<8<=HN{CY=# z`G&;V^nM6t@C|OgBGO$e82pueOnUbs-THzl0Oo-5#v0Q0cmZ0FKwpn4I^i`%;O zI-$4gcAUXq*~gT>ClN9Tu4{Y0UPUlM&gk!-L*NbIE_}0J?=Hc(^eBH*-ZCloJihdq zfUl|ksJuJ8HLScVz#X)MUvF42lrDWt_4g`%zY5&tZ}aQ@STIb?qW1!R-+sqQxy|41 z*L$yETzY>;Up1mn~DF}T}z_Uk<>7?&QEcb{G0Pv7C!>k^Dl?-X!H?dsRN zR4^{Rmk{_gxZmvN*PAqzGcG+U?>ulH*xj!;C>WO>^|#BxoxX=(?-s$h^vIrH1NX{1 z{d#*$3oGw1xMlD1>m4f?SN^EHw}boYyZw3(3C5*I{$;24Ov=56FMVA8<=uPw%S(Dk zfa}}KueVk(EMfd%@-L6!_glc7_g=T&Y;d=OnfN}=+14}9fO`{|e+tf4UeeobZ}<&- z>0{HQ_80-P{Qds?9S7zP!P)f4U)=}hd;9qH{s3n0eckyZd)^;ROOs!31(*v2=gQv| zV7}Pw*SiDEq!xGnsJz>PnK0e2w>Oxo;B5J${f!M^PHOe*T?^&~!P)ev;a>ss%6@*m zJ@%iJE8$BYn;zX)Sp_pT!>{*6FuxI;OYa#l&&~Afy=B&<+#&e7@<$mjfGK>yulFf1 z_X^IIKhk>$%tIga>%9i1{Q!6V=z8OPFpCfL>wOf=ZGv;k547 zW7DJgP(PUbJip#5FjouCrT29(U!L#RyARB^3;g-p3CxsUw;nwoqy@|d!P)Xhb!&H(c(!P)d^{CyJ4PZ#?2UINqB?=COdOAnX>5BBSoz+59ZTmGnjd;`o4i~M@O z0<-&KfBxPFX167Ny}4jc6`U=9RNiyId}gU%?zxPYalzU2sQ&&4=FbCuy|*1cDfbb4UHPN_u?kGF z;Me;Mm)xd8;iiKDEjq|2lE5L+44sX^#GU$N`Ae6 zf$11_=a1Is3&3=)^y`g)xlwSo{Ly&y9Wd9f^6NbaW|y)%f8<}@4Q8h!{CXW=J|#F? z{z&f(FrQfM*ZUfn7X@e2qw?lPunxeNKDPBBjc+@ynUovAmp(4NGMGave!Y)_xkqp= zz5Bu3UUlm|3V~KrA3dIV9x$1=WN#ppMl;Fz+8U}=e9D`IIKY_dclYYHl3dW^( z4+8%H?)py!=n2N9N9FwkxSLP$>pds~(|*0b2*#yH`P=L>lX5@9mp-=s zM(y#kU>Jx$Z2e=a&tjf~FMV8ko1MxT2I3Es9<9r^1NX9EU3$BJ&ad|f^qRrF@ic$_ z_7jXNe~%$>4!C!H-mljy7@yvU!5w(IU#}z>mmZaO9NfWY`1Ljj#;5lwaHTW-dY=`H zOYcbpUI6anXZiKMA{dt*mG@?FXMMr1_Z`8w^r*kx2ky&f`}OV52an;|w2%H6O;zfSF_Y20ScObZ}F81p+3&y9{4(^SYxb^Z7 z*$>RP;B4nIo&@(PFl#R5di1AhK19!P`HEohSN1Xad$N}s!JTlKJAVg*yBf@^5@*t* z`PH;9P0GE5FMVw7OL|kkJSlf1z7c2BI~UBF%M;F2UeY@Y%+nHQ(xd*n%@vb!&*B@U zYt!5Q%1OB)d?U`JNB-s0V8*_Za5lX!f_YBjOnQ$&?=4qN%KaT*`nc+Em#a}P_(q&b zkIH)%m?N)AI9vYC1@o-Lne_e+z3s2X^}Mh8_4WbtF^Mzj(YovkFlT(tulH>*TVI!O zHoaCbQ?E}rTY0;|oGWoQz3+j!_6EP+gJ9l$W5U_=`oMhPri8QQZxGCl5@*sQ`};MR zJHGDM`y-eGzL9Vyy%(TY1heFu31`dS(O~YAIFlab?;l_u{gz*E;>|c8fiHc??oE2+ z|BeMScuT_B@^=cDUrU@xkL-DiZ{r*QzVvbRx7}`?lpDo2;!JvE&*y+S@jD4;%ilF% z{w;APJu2_JZo_!=UB6y4nByhRrgs&XQ#bncz5!bX?RGaf zeCgw~zk6VR_(q&f?;PTOkZ`8*UICGFz_k64bMZcsc8;6wi|GOL;UBs6u7=)8V4Cjr z>wN%B-+gYquRw1tnB9Kt)}#CG_5w5KCw{#(V0QSaTaWH*n+m4;XMVj=FmJ!#tv3~V z?*udZ0l(gAFmL&}TaU`SE0_;F=+_$r^M;4qdaclVE0~^N`1Otiv(v+Fy}h9~4NU(p z{d()c?EWji-uu8D@@v1|$H46Qh+nS-%ts#e>zxc{-{1K4W`QaF*01+jF#A8|)+77N zgIV>sU+*+9vz~D4H9>DSn6cma^}YzE^GUZJ<*yIS+Nb<_7lN7lv|Eqv!#xrr`!!JP6Zx8BY0e>Z?x z{k&U`{J}Vw&;Qx4cQcsU3x2($!JP9KzurbL8~*CoI|0l^e{<{6cyu?I%HQ33bbVnx znA85@)}!&`TVM(=`t??WIpLpfy_=wSHJE{y{CZ_DAAi}ccR2?7uYg(j8t1lwzG*za z66O6hm=khz1;;)=7(m$7f?**3FzMx>H)XTQxhb1-Jxbj)KcM$Uc7eH7aENBq+Y$kH zf%)+kZoQ?5KV`z?+yK7xvF&frd~yuT!inzkegxb)!H^z(Oy#BgJqYg6N$&hndEY*H za_)2Z(#KWabHQA)rCX26`zV-}tvKf@Zx@(7rf|+S|D*PuCm6~feN5%0a~WR&ckLV8 z`J?AH{sGJ`TXW7)!0w zy9mtvg0tzp3cW|bJp2~FUhb`vbJOvqk4=x((+7fS-odYTD45R(&ZYMSFsHoDuXh8O zrv&HH`!kr|?daEg!`mn44#L-0-fl1l?Bv%gf;n4ow)~O(T>|FwJNxx+2J@WYY)i_G&w{h*kv+c* z<{wl2dhghMa;_g=`q=cyo>zeB+rzK77R*-!XVatd-U#NRcl!122J?#GTzV6xP0qc5 zFMVv|2l?k6-!(ZmA7A>|^vJ&~1vBg2e!T*iGX>|;yAaIr@A2zh1?Ew~x%7Sy=0|(_ z_5KFt-Fvyq`xwgG1ZLa!`t@dlSuHqQ{zz{e%+mMy^^O5^o#0%0w}3fsZ@1pzNcVOy zd%WLY-o3$Wy^mk770j7}bLHrwvRLQJb)Z%;6v6r3%8G(R{U%u)OK^)3ao`Tp+wQAKPG zX6qS#y;d-13eJ{48b2-s^M#pyz1zU-I?J6u(%Tcv)DQUey1`s2I9L8|0CUv`{d)I< zX*s~3zXQOu9_ZIQ49u;9bLH*^iEq`RsPlI{7)33M9oXNQgzVxx_k^QX)Guq|X zI|s~5g0tySc{iUsIrmq5>ErTOJ9VR<<4Yfx-icu9J$}9O!MrLsn;!X>N%JuO!uuAA_QltgKbpU+2Xoj$zut*p zo)nxdf28+3nEU(vdar<4aj-vsMKIlq+Ct|1{=?`WAMxv*C>WpKec=8u;Md#k zaL)MjR)AYu@atVD7@ywn!EG_**L$B}e0p_orxpEr-x7>VZz|ejv(n_;?!$h)9>KWu zsDGRe?y8l3z54~@(xdCYJFl9Y+qdl3J47%pJ+kME!QFX;U++1=xb(=L_gg(VckqZ` zZ-Zc5dQ{%q!9BFbulJf@e0p;$lXD-c`t?o_j7yLF%e~+p9`)C{d!M;Ip}!K+4RW2ECMrpf?w}cFwY9krbqdE4a^QF`SlJ0bDrRAdX&Gf zg1P-n(uZb6{qE&aZbknEg(3>rwtb3g$*t?B{CmMHy)a4Fq}K|)W58U0QNo$7#~%s3 zUxJx;al)DO9sySa(|1Y2ne^!X%e8{RU)jf`cO^nj0QbI2-FkDuEe3O*;B5Vu>hG&y zZn=!>+3JtP<|M%(n$ccp zzwUEjK7A$Ev+chu0Cyvp{|L^Ozde!Ao4+zS_ra^&`MVB!>%hF{>LguL`>u!HLNIq< z!?`UH&txy1`2B6y!XMyEA6x!tKdcI7;H&QZk=_@<{8n%-y}yC^-PinjyInUqH-s;J zY-~CHfcc}~TzdZj^S2w^dWRt0eQ%tcI~ia4Y=N(-Jt%))0&~tye!ZWA zdEeLFdbHo!1E&2OZawk`#|Q?0Wgk=iXufs|xJBROdNz9|y`u!f)y(Ck`PwJIE&i5U zZwTFx8Aeh_7M#J%08y@QvL1tZCoF`)vdQJxS4|CYUc8O z3xVCleaEdw&u!RKFfP425%@uH|MBQ;2kt$$@ibj})V?!``>s2Gq_?MFe0sCMZMM;^ zN9Em1Fh0Elz)kp`TaWU$w_sd)WPb;O+v;|=-ag=(1>@4Y6@dfbcD}=}H(M|+J!;=0 z!R>daTdx`1hXv!)I~Clb@4NM=yhnk#QgF8Mjmmoin95yly*GjT0+=rg&ZYM?FstwO z>zx7SQo-5uHX_|?z>M7E*EA3=Bl|lJOy`f?depung27+e$CN+P z`zW}!pSbn%;8udULU6Y6_c3ta2J^+Aay{F8az40U2nK&;A5;El{=CP}Cg)zmmp(Q< zy1(`V_j87U_`{~x32y2G?(*)3_}yTR5uB|(*mwzM@z33QG#-6aFs}U3c=Ty-vmbQp z%>}m_%ngFGwFm9T-Ua4~hq#`t{^&i+yZ(YRuKdw>-UM!!hu!(hgX;uyqTp=#dkow; zVAlWAoj)3nZW0Xs%08y{rS`ZR+!?=e=a0stZwrR2neB!2?ge+wuibjIUfl@ht&ecd zR^DsC?FHsR!A-!wP5xjie*d>%@K^RRm6!VOJ08XPSbXVY(NlKWApS7vU5DS_ z4(|@H`Mucqk*yP;z{ug`i1E*7&|Nq}4 zjY&e1Bu&$#Nzx=~lI%48G$bY_Nwdt18O>;n*)fEqJ1faYldPs;6MzRq>7>zp(9 z%_7M!f71W`%`gtgOC-OQtS^UK`l;Qo1>6q9*!O*Jt z8|nD?1e2)$<@s?INwVKa`5S=WRfo?DJ@WT6TqHj^KHfHr_(_W7caZh}4fo~|*Uzv0 z4P?I`!Q6QCOgSR?rNccA^YIsUzblxao_p-PP~2B8SKlXpYw?>4GvMnp`;AoI4RDKL z^8ev-ay&=MpG@43z#RE!uwUm>JP&u;?iYpMB$#O-X;H+G#V>z**gC(q%lYN64t}xc zM1@+N8|*h4rsH{bzf;u9TA0=K?0z!dh>CU@DTky;^(W`^#&DYr>(^d7z#UWg?ShLx zpZ(T%_igiwHw+(fQl$LJ_-YVb#|wh}vJ7MFB9?bQ8)w6fZxHOa&@eW?!))9QxADSY zzaxgR`APob8b*bp8U_0$7$(SXC|u9R!G1-CvH6{1<6^jl7X|xmF^tXcC>v`xi3%NK zkz{Kx%`bKt2jnGEdy(s5sc>DJ2K(h3Cdh9A+^kE2{ni=A<|pMn4!6HquwVU4gUc&^ z$#CtO2m1{)j4glVY@7}^<+5PE<%Y5ON&XJN?Q9Y3ciJ#EKRMpoUmg{TX&LO7Vi=pB zwC4$M92@M{(J(=Ng>dOt1^Z1hjLlE_ zt2J=*;)4A)8Yal^6kOTW!G2M#Tqek`GhFO7!G1jrWAiIxV;C+YKG<)HVS@bD!Ogoi z*l(j@g8WXw?P+cIdzx`Xo$I1P&$e+nnU6&3PxruGbA43koEw7uu7g>fVE5aPU+){~ zuWkzV8wm5)_IAHA{2skID)i%9g8iO=X?&~QPsaC)VZyiB{b~ybv!s*D`HgpF{1SV6 zROmE|B){`pSGKk4>@p6>OQd*gVEr(-wm-7_rNZ@xS!6h}>+821rZ~y&C)bK^Hjv zemBEhdT((4?lp{?yU6vojg5ohZs>2%-_POhGmOnoo-a897dyc2_betoVg775zw##H z_c_cp16@CPjWnN@{@`K5*zzasZwg$m2kiNi{oZ5W8OtexqS#We5AMgDJ_e`!&OFGt9oB!G6&XMum2>1eLdGZd9msUa((ZnAl-< zzc%D=5X{tvg8f#&Ow70Y$@B8-VD=3U_KPl{yezizieJ+a#H}#cFAJvKPlEjlU}h8r z`>lbQIx^UABg~=VV86zrs23Jnd8Pfe932(v{BW?}P?!#5?0)h16~W9I8|=3pX2v+X zpX6^V%#lZe{hE%C3LRjvmA3_cv5!*T3Bi6tVLCi!_mlQq1T!xj?6(nS*5h_RX@A>c zPD~8;Yxz^^g(axGttUl=x<6s}`x7PwFn3J0`$_-zD9p1@2K&7OGi^$+-zJznPucyX zf37n%Dzt;eR$l4v8~#^RC}x`7PtHdvhH(sei8LMx;Wrp=@Y8m`H~IXNFda%{62!Y?xkSA2Vt5nu=~mVw{)15F9-V_g?VwI-B0rO8O*JVg8fFp#Jw8q zHw+9)oGS)b1zsR}8b|jbOj1Wl^EGStR-O2XcIT19SKC zV85qe65k5;n*g(QMX+D=FPZ1D*z%W7{{98?z^{V+eh$-pmEBL;%QTp>w}bs!td0u( zp2e2GUidY7hwEW$g8hC0lk#i3UswD}V79Lf_G|ENROnq6TmGcKI%i!}=&s)c`#lNM zp)}ZUJj{mog8f44qe5@8*zzak{R-yR4Z(h+VB+2n_8SJXY-6zBA(&tMcd*|lFjxJ~ z?spF57z~rO+2!QAN~H7eQn;xw9k#ffyhb|zo(DG>=IKA!{g%W13MS`|cE2d$VBXzk z_gfA38O#gY?S4|;zr!5;lihD6T(ceYS0CE_>cX|y$^7l3V85O)r+3-?=25S`|0gPR zm_?FbJleD0Cc8N<|9pmv6p!X?E`*u-7ni#f&q(pz#C5ny`?+3n$mQC=Me>vHi>!0l zW%#d?BKg%Je?#CN{JYEgU0>^n!^?&-b`kR@*JD41d*_JjC-o93fAW2spTgYtxy$)o zZ<6`ULoiPswdbz|e!n#g|8-KN@=E?bf&29r!TI|O%>BoL^EVvksW0vMlk27L8^+CD zG+jBe-hu`Fnv$h^Cx~KFdrJuFCKE7{|)AguY>)rFLxPR zdFB3oFTnRVbFgCwUY`A+y#N#Ey*!-lu{08p%f7<=zc>S$mY<_b6 zc@Nz3Q+B^w;dU9u<|p}U^bObVStR+@-!!&eeA;Ckke5iu#}wlG65O?+dJg92Hz8q8DY*!^PR-ZBjTbyB4A9%Rd(;C@{v z*zYffF?JElD}LvmTQBr?7D;~fw}fpM*R2=&4T~hd<4wlne}cI#%H<@2k^0knSpSG& z#7|PB^2+ldTi`a-bN&4Kd$}JKigp?KuOvUe-f-Q|xBDgY`H3(a4CfbLxel@wW?p^Q z&#(TjgxhEs{_CVj`4hjt!o7Wg-B0?1PYmO_MJ})0U-$;@!v=OgiSIWsuU_bKe({z0 z!mnX2Y~*r&@lC~VuwiWZJIcm4;a+U)`uWB8Rk%MJ#^yJM{7t;5Ug%^K*H7-lL~4IB zJ}A1lUT7(cBwKt}!Ax%Ia(?k`hQ~6)IEK7Lim$Zijd1HOvHQv28yql<&F?T9%i;Dn zv-@2JSN~F%3G%xJ?xN;)Kk4spGmOozjE%)`X_wjku7DeF7@MD*Kc0tsxP{$M%KM^W zY<^OIYv2}LZugVxlUogA^V`J6&*0u@Y4?-<*vhlLG zdZ9nENb;+{``Gq1Oz*2*&MzKvz8nCP)XMHB`O7s7|8-KN{y_5g3|yCM?0y5_9)kI; z;r#L^et&>@Jl^it5bia@@LwlI%3mp4-hmr?ZLr@2@_kSDM_!iu#*1>)+7{=ze zg^h2(jlC||?*`@k?ZKj{xXg?lF<*zZ%r*!-lw{{rq0HwOECWtbqpbKBJmeaa%quRoCE zquxy}<==y<`}hpY&I6!999=u-_|&3G(|D+~b{t{a!Onkl#CSPy8s@ z?+wG){A9fLF5DAI3O~aH`oTSMhr-V=fqrmLB-{P!WAcV!Y<|+8z61AMmtenl4P*0@ z_WV1z7rNU0o`QSdFgCwt3~YLLs}~yD-SzXE4|c|60Zf_U{N}52{2qtda;M!-t{+6D z)C=`zk>uxBpZpDj8QsI>{Q7&D7tb?{W5`RS^T!6(FM=D^)9xqbodL7WaDL-IY0tZ1 z7Tjg`lkdye3{!46KfhAA+P&(9*0V_RD{mjR9Wsmq@)D`MGJd}G?s}msd%J#q@x1}= z$1u|j=a;{kaI;`q_wnR!Om=2*CL2wXc=R<)#k!=12}x}Wt8;Q34TKwNSoz)~hl}7h zN$EEYZnna2mC|n=+-8N}L8aeOxKj$h=BaKS2i0FJTwBB1>aUm5FAXk3;Wt6)HyLh* z!f(0KZ#CQoh2K7<-yygY3cn`z=;F}=F5a-Vcyw3#^@ba$@EfD_3&TxQ_$^WTt$Q34FWe!8 zUsOL`JQ~8aFsv;e9hH8`aJ?0N`AWZHxUj-+p3-j-+zN%?Hl^P#xcv&h+G)CYM8h>T ztSuhxm42PzQWSnem3{?q;}m|gm45T#mMZ)czV^vi`SR`|_O`ptn`r10CI^xFcrOW}7y>313~x_@vy;tdlNj|8|*3crC$ zzbv={h2J!#-%Pmq3cqzqzm0I)6@EvRe&uj=?hB4btYL!U(HgFU!Y@tfmkyV!@SCjk zD}kG%@LR3)D}~#l@H?dRI|g@J;n!k-?tBynmta_1|JPgT*B>rR;TKl=O@W)K@LQqu zTLZUI;kRGucNnf*;n(zjT|8RCwKl9R9w|z{RJe47-#De;M7R=#-%_RDO1M&m-(IEP z0k~rdzlH;K@n{AYXINW2l9hfv;rc85ij{uj;if437AgIf!L3pF?Na)c!5vokML(d6 zM`O5_hPB0`lhUs%T&lvaK#k zZmz;_jnZ#D+*XC(VWr=3;WC2b(b6zM@n{9tPT`lT^cw(|t?-+u^qUGdOX0Ut>9-bc zlfv(S((ee|NrhjtOgCmh@rZ$IV_4hysHf7eFWex7-*~0pB)I7czhz3lRdDMSeq~C( zgK)xCMyNV3JFjbVbu2kqgK6n=x0ena7k z6n@i{ezV~gD*V9!f%q&ZyMZeh2JWr-#WO> z3crI&zoT%c6n@R~bmya3xVDD1^?$vTera$S3cm?TzsYbj6n@K z8>jG_t@N7@w^ZS`S?RYOZm+`cl+v$G0nh)jNV3JFtzm-3YaQT{6@D2?zg)Oth2IRN z-yFC_3cn3Xzb$aP6n-a^ey8E0M+C#y)DR{D*Ho1*Yrr1V<`w?^T&OX*hzcUa*UU95{oW4M-vwZ)^8(yuFAs=}{8 z={Fi~qQY;!(r+=`N`>EcrQdG20}8)7qjd4857*4Fws>?<`gMlusqo8H`W3>BSNP3Q z`YnK4rtsUM^xFYfrtmwh^s76X=l@tF+2WC4n4s}mB3xI6UzXBu7~E)u-%O?7T)4#w zzl}=2t#G>)e&tHP(8E0c#}X8e)`kg+M?1LA3cqxvUp8E!!mmW>Hw$io!mm{6w+U{C z!ta>U?<8E^F~RYOGfYrC+Q20${Q4{X2Eh$e_)SszO^2JS@LQwwTMxHY;dfZ+cU-u! z!SQHmn4oyHf@`PnOI7*}fXi0+O;q|#g`1`DTdDM03%5z(cR=ZP1n#85uh}>^WlJ=wO230}#}$5!AJN65Ib18l+Tzhw z>DLQxfWmLI(r*IXRE6JSrQdS6wF?_`gMovtMDsS z`i+5`r0`py^jiYAO5wLd>9+^&pu(^2qq=xBfNO48TRak#eo1h>6n?{$enoH-6n=A+ zehcB2EBv-9{dU6bQ}~4@=;9Ft*Tk^4c(hacb%g7#@XJ>E<-?6p_{~!K&4XK_@Y|&H z+XlBs;dfH$SNk!Z|6`G4i$@#71dR{c!zC&F1}Xi9!WAj}rYrqs!!1Q%B}%^)aO)I)dz60r;f^Z&8cfo~qbXdhVQuk9Qu?L9r78T1lz!vj zCM*0FD*cwitycK$RQm0OJEZW7dO{bEhHxzmYl}xmrC%~!Z-rmJ(ytgUtnizs^jieC zLgBYf>9-4RzrwHfWL-R>;hGxO7LWEyzfN!|3csOBzXG^%3cuM(zxi-W6@HtQe%s;p zD*R3<{pvi)^M5RoZ1HGon4s}m2e@Q~Uxv~z7p_?0H$&++2X2wVZ-dfr3*0V+-wCDP zX}IVq!SRSUOi(-$;5sS%1}gos;0hFe)0BQQ;pQv+)+zlq!fjXh9aZ|3!_|2zI3BTv z35rK+xDE=xG^JlUT&}`zveK^vZjQolwbHK?Zi~Y2kkaoM+-Zehi>bQvQ5;-?VQu|i zZ>3*g+(w1pex=`GxN?PG)Bn=Nqa|Ex!`kAJqV!9JOIP@f zQ~FJWD^d6@Rr;-jD^>XIRr(!(JErh!I87IiW^i$awZ$V@>DLpkzrwFr={Fv3io$P^ z(r+2u8in63rC%A`;Q&ARJ*w!Zx$nXvNq(Qi@AoU(!gMrTWjui!YuXrc{uUg40FtI{Ootc-_4NU*N7|8wW|cUPKK>4hiAXe?{z5shQbvo z{H81Y=E5xw@RPW0gxP60Tig!8obdWZh+C6qs23JVu3zN1rNZPI&aeI?Zj)h_8O|2B zGQ&7K=Ebl59fm76tlxemZcV4_+CeN_Tf^G?dMW(|z-0&cN!%vF%rKlSZi`@6c>N;8 zZ5vE^HNVJltN$$hDT^e(@=Dy2VTKvb7Pq;EaSVC!i`!zjm4@}(uf%P;(r+)^A%$Pm z3|%{D0vBUgzx+wuI>YofoGoryFa=(}2yvSRv$C3BaRUqlEQD0(r+kSk-~4f(r-50!T>*s?|P-*R=C{(eo}wsO25!^Jip5#$rg{+ zhH*e%{Nm9LuCu}~UFnw%SE%qSQTok-TcGeORr+m$+oA9~rt~`rS9ex$JmL%!6puD= zi3-2|O20vH!xVl~lz!9U<|_QwDE-#MZ4K~~G|3F5F^;-$te1 zR=C{?zjCEtXfER+7D;~bkos$F7zgCVFCOjSIxGCrm44Z9g$lnCrQa;L1q#1XrQasF z9SXl=O23nEbzcaMN1S1T;?V{!QQ_BL={E>&n8I(0(r-H4T!r5nrQdqEtqQ-xO26a6 z%?pl4OTz@kqZM2`g%rwK<#u4*jmU{gnj3YL~9INIR`MOWt`TV^-izL7D z$~dAEOt#@{8O&j?Uxaoay^!-DizM5;r#s9b!}+y8Y4_t{78=gh z?spo-*)cDEaoY!X#ISz*m3CkM6GmBKlJnNq*&(xFy157|s^A8HRBTdGU+eJh&x>_1mw+ZIjY(2V9xL z@3hh{`cb{|C2aVxc8rCm=61Pq; zy$olITLw(N*DpfcroybK<`+3`8)5c({UXeNPr<}3bIWXtTYtk)Bq#aBEeo!|uzvL- zahs;}n+>;6;kRDtw-s)8fS-&f%awkiH@P3cBFV43;@8?R4#fI02;i_orGEayHGizHjS8f_Q{2%)~}wW zT`g7mt%lp6@Y|>KI|6qyz)#}V>@EIYmqn5-Zk=FK3|Cp+2yq(ea;3w^L7|b}s+1hCd%p9*@gm$_brmUJ@F@Q65VvBOxz+q4$89;xCa<68IG4B`fN8KQxPM79Oi%T^(r+f*e1+dSrQb%l?Fzr6 zO22ZrI){Vf5o?&Bc(jJ=pzupm`lZ9=D*PrZ{Yv2GDEw9{{Yv4sDEtm7{f@z%R`|8} zyRN^AgG(^1?Re|0^y?3orSJ`mKT6sPNmb^g9e!uJCJmL>G^iaIFn% zi${vmFBL9b;Wtj{HxaHx;kQ)jw-T;Y;kQ@mcL45~!mr`yx_C5$i!-b(9?43-o^bsY ze#J_^@o-ZVev6cT%iz{1{B|k*%HR$w{GyNQ;?WqcrD1LH=%n=P3YV(zD^U84hMTDH zo3Hd+47XC@w_WMC8}5L@ug({`c+`h$W>{N1Iw<`*!}V177SBf&619-bclfv(S((ee|$pAm+{>%yP&#*|cT|eyv zlVZ5a^HGHBr$b>%s`=Htek#|^7Qieq9GCyx>pq_Ab@F{JD`B=6u5!N~POeiQG7SH9 zlHYZ`6L7V^4sNG0h6(bEhik9!>#Ot|2sc#WH%aL?4Q{r=Z-*TnjYPbywzkN!-LvSY)eog+N zi$@E%c*EM_(Ov1+8*ZS&Z;a9}3^z^Tw?yf;0&bncZ;#S%KipA;UxSmncr=BJHLNWj zNlL#IxHN@dkB{LZ#nQxYY{3ol3vGaEBCrQUBD%qaj=i!`kA}QR$Zq*IVJ2 zukrL72HZS_-&&>L2Dohs zzavV&6L7Ud(M~nn`l}ej1jQpBu6=-?93Op^euLnK1^CJFF-7S&9d53|Z;jG#J=|7> z-(jWSap7tO$D^fTg5uE%u3dniTvthj$uOMlx=Jxj*y|VJy2?D5jn({WURRO*?uI#3 zjpMm0&-IcRxYIB#YrFMQhxg9;(!)u+>TVeR>m9-QDRN=Q*>30C`n8L4N9bG({!NnQY7LR15Ur)IH3cq5d-*~tw3cp24zh!W16n?vu zer0fn6@Jm@>f+HDuBBmZ@#v)V>k5~u@GDUIjfR`3@SCsnTMV~S;kRAsw;S$&!mmzU zT|DZ;H8ZR&9vzf^o#A>a{Bo6kg>d5)esh$53*eS1{I)3lcEFV>{7x(V>Yf)JYRn?Z z7LNqOI3O>6=kr9kt_r^_rQa~P(F(trO24^qixqwwm3~{{b}RhKm42b9=umwYNw#>j zHjD%E;unv0aGe!?=}NzBxI%?riPCQt+=2i<8UK|k{kFjE3h$J-&L-wC+d=Lg3l#xOzgh=*&h@awDe8wfWv zz)$AClVD~V&NlB}471Yf7h&GL9p+>;znb%Ic}}50{pe6D7D;~neLUN`!sHvy_IG^q z4C5H`;&)zH0=LSre*2YnutVur26tHD7kzKbNxiC7^kVTSTdBv}-VH}VbzxwL{m#py1Q2OP<6$ki9JZ32U z=D{sd_-#`9?SLx_@RRyGt@Nwgkof|OBwIWZ4C8>j_{Ad;uB*Z?OX)WZZnVO0rqXXN z++u~_My20YxZMiBa;0CW5%UEWNw#>jHjD%E;unv0aGe!?=}NzBxI%?riPCQt+yaGP zsnTx~+zy4`F{R&0xVnw)@sRUY987z|+0I)jFlk=D2jS}2v?%;TdMS130JD{+pF|D0C!B`*RZKB9?jt5 z3~P%=veK_7Tz`dMvC?lm+!Tf1BBkFlxHSsDT}r<)xWfv+=u33*XbjiVu(o(~Qu=j; zOI7$4DE&smO;q^JSNbi6TdDBduJqdtcR=A+re)E7txULGnET!KtxX}u~ znM%L8aEldw8P{ z2jW+x^qT-THNa2C?TeLu%i-24{B|q-_Q4%d_|?DMt>d8jYXTQzSiky{@^)7Gb%*Qg z_4BlY4EzdVwi(WypVw>$vfurN;lEDuJAMztl^fPpj;1Yj_0kfqwP9_3DN4UoxO9cz zIHli2xDtimQl;NYxKf4RUZvjwxMK>xhF9p~(F`umu(o(4EB$)H^;h^6EB(g9O;PwQ zQu-}}TchyXrSvODLu5HNa1<1venTPx{HxO1}wk zQx$%Tm43_N)++pVEB*Gt9Z~qzkJYu)CU7x^t&E4K9b`~{onht~&UQXpVHiH*B)_<= zf!k=<%KduoUpnVErQcz=a)n>ht913!60WsjZTU-4`lZ69EBwYO{U*YdDEyWx{Z_)2 zD*W~;{SLq#3-FWUykVR!9xdSF4eJ*V>HoUJ^f#QX{~HD~+Uw_O_tO8(gjrk7uV()z z``rdpR*g%D`1cFPVVYd+mf3b+qmyBf9Y))r&4(FtC#+8S%&qi7b!hYjnq3OSsmCwbfsW(k~S*UEw!Q={FIsMB%qo>9-QDRN=Q*>30C`nAa~t zyKflJbr2Rwwst?sFb>FzU%Q_MH`}nbxUEw9t%KXF@H?pVI|_G7;n)0HT|141Yin4) z@=E{Q3ntxgw(~+E%y_S#CvI|Hm;*s0r8TggM z47lE{XTS486S#bsu;D7(eT3iXnhG<^aFub3u-}z1P1@S`EA1~HCed)V{U*coHk@t0 z`7m1y=T~0YZyC%{!`b$G5~l7A!R<88FjzauubsAmOAPRn{Pl+!YB*c}Hx6d9*UuA= zc>ET^Y^ml~v;TAI1?FfqF7o`NP6F2nStQx!AH59YfV}wC%K*4+!&b)EGmn?!W1`Zp z1a3}%pOkks%qGLx>Uj^$L9btgdaipT;|LZ>e(g{CwPcu{hO2CUp7P3b^=UBqhO^bn zRKv)ACHd9!EVu;$ev-dZrQasF9SXl=O23nEb=xV9H^VrEwUoCFT%y9SztV3I+%SdT z6s6yExVZ|yHA=tra9b6Ahn0TEg}W&@9xV+M6pvPL?G%2gO1}Yc*$TgjO24UavlM}9zZ4B$zzes=3Q|Z?iZji!nywYzH+;oNCGNs=t zxb+IZGNs=^xZ?`H#y9KY(HyRoVQul~s`TpxH$dSxTIn|dZfby^oTnEn{Z_)22KY() z+pF|D0C!B`*RX>w9?jt53~P%=veK_7Tz`dMvC?lm+!Tf1BBkFlxHSsDT}r<)xWfv+ z=v#F0XbjiVu(o(~Qu=j;OI7$4DE&smO;q^JSNbi6TdDBduJqdtcR=A+Cs7xV`f$w* zYl}w*rC(>bo(jKQrC%Z3c!l2_rQZU$WeUG7O1~X&WeUI3O24|d^86%=q{?`B<|$#e zCBQ5rR2>Tf5^0mIqq?<7p!+dTE>iCa8=aWK6M=QqEU{bs-vR^uYi z<0ru^G@NZ7zr`?EJISw}cfsv9Y-RiNv;&D-?M}M>r2$-X!}|G2c@tq$3}>t7beLSP zUxa#|47047U*zj0>tVK6<09Ad0hqeCyJfc3b6dl>wd_BS?+Dl3uzvL-^_;ErD});# z;3vn&9Hrj^xMd2zElR%~aAgX=(@MX(o#`i8B>B~!lsCaJ4#9-Ybx5BSn=@#XogSNdhc6)OBn zlzy||7AX8mm42Jxb}0OgDg92u)lCYHN1S1T;?V{!QQ_BL={E>&n8I(0(r-H4T!r5n zrQdqEtqQ-xO26a6-4Ps*mWBz6M=Q8?3cpmP-vGF5h2KP_-&D9+3cr;~zqN3iyndeZ zekudf127%Bxb@uH>0dbSd$`rC-`zDjG^3l#UE;$PuzpN;m*KxoN@`fsuQ^)|)ZmgL z?l*KN<4zVye)~O-ZSzvR`(<3>DaRPNSKu!1;j$Ok1j zQqM~waoL&0nN@al4gas#pYIo7kwoz&zGlC1Mb1iI@$C<&gRBW|(7!v&G{SOv3@y%3Grx5|8FEtpYfy=LDEE!}-66TWo-SXPF>tOnLIZr*eWxqpUo;94Uo}Y(#vpQF! z98%Bkz`P&8Nj?7&=1ap>*0Xcos^0D!4U7)m%p$3h^OWOSw)KMT5|0d+62sZbF&k!Sb*@G^THv<|X1n1k z>n}n*ABAa>?kR^Se{w#Hhq>Euw*1`(^H6oJM*gJTkAiv1aJKgR0?d1ct1O2nf6{M! z0(0Jv-E!FS*9hk7>RiP9-2l_YaJKy22lI%6dj{s0Ud~gFB+BvMFy{@bS`N;ap14W< zHG;Xi8dvlDA;;wnFt-J8((b##x%YP2gkF28`eAj2(h<$gW! zm2zAM)5mbOatwia(#v_;mH0gm^Bcq2%JDmxkE?Sv$|3FVuQ2~KoGpJBW=4l@Vv$r? z-U#`-2WFJvZ25Z(=4aKp8u^p*z5w%{;p*_-uOI&#%mrC){%qyA5~iEs{K|1X`xyc= z-Eg*Y%z;@}ovTp}Ieu5eYzW|_yjx+88O~OYxny{#dywNJ!IYz7jr-i^93?kT$t_TFihf45$@w~Ijb z9aT`AH$10TURF_N(b(JX?wUQg>)3+K;dw*4O7{3f*KXbKxVKkYuO7)AV~39%J*2Rx zINP)O?tcBd^iAvPS=*;q*WP#B-K}42j2sGIu)M@FBvh*r66(@1y=(s)+uw3adh)3J z{G8(SD|T@7iEr2@0U}Qmzke8F2?}(jVQ{`?lHV@L{V{0QTmt;?bDqc zre_sb+tPMK*04~=P^U(XOE}=V}yz*Zs;S;)&M~0`i=fuhW<_(Ie4giE>t_zM|OOSCCS;~zR3QgsLXTG_GbM< zbwgpvQ$9Ky9gglr3sA}D2vo{5nx${3d$sb&=j8O)lBG(@uomc=jvX^@Z#9nSa%i6FIoO8#3SRVKH%`_!Uw=Y%c}ol{v8KVj2#ETjf}I0h|d=~FA8 z=rn31*E;eG&!KhDxoBN<9(o=s^;mE|e?I4_$N602y_0RCdo1-hWJJN}oTB0` zBl7d}M&^wu=$D&W=+thhPRyW(c=iuT?W-o3Q%;300h)w{x*k9OYO-gpb`qH0+ZJ@4B&Ei8sg zs?zA1(sbfkb<$~vBc-Oh%7xL!riqoGSzoO+K1&7v%&p{0K@0is2B+QTj~J4f-;agf zD&)Ac>D9|6GKKk>1+IHDK9W@V5odkx5kPWZr`GVC zk-2Weko}jkKEnPlVUzSWZYhT3=H+L*pOFny*zjtMc#R~xIoWsP7!tGTY;fyi$cTK0 zcdEpjwO(XvkDE0q&n`aICQqIi%S6P}L*2De!6c1G1Z=d?3Xsi}}Er;xvSc zP@Lv`s*F$F<$NlyfHTa{%pq=-%C>`SyS=h@dQ@z8D%G3&6CC~VG6?4D6!@rI?%#Wv z%qs}Rv64>BW?{t8%!YWLR!x%7U}&@kj&TYj2W&IKQe|f}vyslRCsV}A z+@+3i*2|eFqjG(o!{ze6kJAcs88W$z+FKQa$i%NNaPlIDLYR+4Xz%hV?h zQsPls`AIp5rO$B=E!Mi-L~#-AucD`rV`M&?A{{>xkzH)N+R1s==v=3L%x2B&F;2z1 zMj`Q7%-TrDS=EDmIa$0|ZnB1)2$u1Y$793@>(t_+8s!px*BSm`5Z?#Bydf{{@mmfb z?;iS@g^szm;wBURUhb(*${+)PzRm}RFr*wYs=)M&(wyVjwww!I9AK4Q=18Yv<fOIg$30#s}SYl~)bhLD4>TF=?;4 zU^V)2iQ0h59T!rs7qTXUHKqg4u4Xv^%buLkNSDEd;Wn@b#!zzBN-N4N7&(;lP-Xp9 zG{6R-TN~9T*OC&cGoABw1uF{_WQ`Zq+8AB7n}DT&HIru{3hLI-hbhF&xpI)_ON+h;oo2G zn3F0#zuNQu61P*V+#YYi$fs(C-& z?LI;unEHRiys!BDhvxkgW_we&(+E|>E5p36h|g2zeMNkhnD?!ic1V3c=N_D)!Dj#K z&HMIOxZ4M~2V>>-C(Qdqv;B4RzN`8C|CslWb2btG^WCN%$}rnUnD_n6``6ueTN(d@ zRo=T3v18Oul8Lg^)O&D4kBY0R0f1ita?;Lq9@gyz*x>i#q)n9f5v=7NdVbm!tbp z8LAva-$(z3)~4?Njy{4OLBlAq3jYKB53BUG4up|(W_C~R`?k-4VA&n1L$wibo2vs5c&x^7(Is` zBNJ_p=Am8CVdzx!A@mn$K3awrpr4^5(7N;-wB7JcXc0OP9f_u+#pq+`XmlF-F#0_D z2>MI(F;oUNkE6TLpQ4|klh9i9C{Li5qEk>A#!N%oq8uCH0<;AEIm)mz{1*Bwx*DB{ zeu_Sao zbRo(dA^aA)A6CjebFY_ZZ6qp6gJpSVs{eAJmn#3QxFGc($j6P&Wvc)0^U>}Hl8>9T`DjF6ILLE-D~-m{jW~*a zd`V?MYh0$RY#s$8xrEF-Dmin=Ll0*bWsj7ryP3s#S@}8b65Y_GvY!aaT=7a_YlJIa z)h}V)RO8Z-_u^7J?-i?d-jCeao-s=Gi%ZTGO!i;pVv>xhb6Ito1BtlV<6lm$R`b>kj9-!*wU(S?APZ)e`)U z?eue!WXBEpuREKea=RC~*N-VdmDS1aYHwboDwdHSV?$$cZ$YZ3U%h9yoBIK?#G?hQgf$Hlc=)V zC-+xUz*daYNHRMwr6A^lNM6Ccg@rjq`P>02cD7|yZp$oq(An0ja$7>xZM{Z3oKxg( zlX>6!D)oLnZ?Zdv+^fUM4QXe4( zyq?&|>WnI@eX3~+87O2}NRm&K27e+%D{abvkR%nmoM8D?Y-;7UniU&Ubz7Cn5>J^q zS9(_27O5idq9WrNXOiTih794GIPGm@eqMG?k<;Ylir+RiJm%D;yP-y_%W_Sm7LLmP z87uXvRqen}r8!lswp3>Vqf?R?Esy*ODM!^t|19{Gj2%hR7^0%8+<9_tTgeAxN}EL8 zOBzZ+yOYTh?;51`5^ za&Nb#gvOffhs^si=6x-)%Q(4DcIIBF z$+m2gv4G6MpWy%P&H8BWk#*yJeY7{)0F`dAG5RWc5&AxQF}eqBiXKBRLC>cO=~2UX zp_ig^;<*eRh_*nPr-Uv?UqY`yuLir#`=Oj&P5W6_SNoG5;T-h$G{hr6K3 zsC4~Z(MQm3=+DvasLY}7ME{9$p*$=-drvf)CcrTiZiV(j??d~bJJD41OSCUa3k>x` zrEllTTlix10rX1r$EbALgVFoZ40IHliT(`DLZfI(L(ph62fYO4DtuV_=wawU^dWQ% znvc#xhodXe0(3iCi0(swf_{w_q4hafMxrtYFGf3{52JUYW6>h?5%fiLJh}ya6up?< za{`)-K8D_j{uE6^C!x|gKZWL@Q_)fAG*o)s67&u98T5B3*HOZMMW03GY1$d6JRLU^ zmCkh*Ds%9kqtBzW(Q@<`=t=Z>^gIro7g6b2UqXAL3(#EjWppyS5M7AAg04qjML$Bh zaS=X@(#FEI=*E_yP0=^dt5DipSo+8nXd?Pcv@5z2m2PhpIv#x+osF(WSE28q*Kx?M zL8Vt)i{6gDi#~v^Lsz4vs9YU<4?TviM=#{i{w>-D-GFAJ@1s9KH=-la-=kralVNxo z`T_bf`X_Wb`XTz?=uY$>=tpP+`pMm>^p|_kWb|Wn9J&`>ftI1~p`W4`&|mCFW$yPb zvA^3h$H=9h@5VOKz29bz(LH}eX0bE7DaAHIGE<7xYz>}L)VN>my`$Z(#vH@@ksE8= zz;5T6W8CW8u--<7Jadd)tU8B2x#~oqa``Tph@<*g(u|M$)@ zI$tCC|9^7~PHh3>rT;g_V7&ML<`~`q@egc{(VK?+fBPImE@q7897>W4O(8n$NluUd zU`}R{Gg&ETMD=vM^jxy4#>J7>`J|kbNis>1>uByAEptrXNV&QrYhyfXBVVeK`A&Ox zs4pLqOIC#p6P+jR{(n8+xtl?Wq{(LfQ)u2-%zvKtyuX}5i6qZ_Xf|W_iX`I}nGa28 z#Wb`2uZ(wOOmh(JjUGZ}K6C_q75yB2AN>NA`Oq;`=0jhiG9NmQ%6#YqD)XUoROUnf zKxIC}eL-hFbP9DYxt-(AhiaiRAF7SYe5ej8^PzLmrW`|c(e^0!6P@``6w25%6phM! z=zNqhUZ_4Q^PvW)%!eAHG9PM;%6#Y|ROUk$qp>LWBc1usWvI-DTA*FfmZ;2!Vo;e6 zU5UzkC>E9Z5ce;g`A{4x^C70o&V1+^ROUn6*L3DXtx=f|U5Cni=z3Jz}2y-=AC-Hpn8s5dI}p+2b0hx(#2A4)@IKGYwT`Otl+%!dY` zG9S7hmHE&>ROUm2P?--6MrA%U1eN(vHY)R>p{UGy%!dk5nGgL0mHAK+D)XU{sLY2(p)wyDi^_cH5me?w<58IpJ&MYFXaXwpp~p~} z4?T{`d}tyn^P!)jG9Q|R%6#ZaROUldQ0dR7p)wzO8kPA_2`clU>8Q+yo<(IoGy|3S z(9ckr56whnJ~RuJ`Owc%nGelIWj-_qmHE)~sLY4vqB0+P0hRgCJXGdGFQPIZnvY7~ zybzs?zJks`7opPSE=D(_ub~IfC8*r1d>wrN<(LTn7+r=wjIKZ@p}#~Yqi>@>Lw}9F zh`x)iLVtt)7Uh0?csIHptxv!FTl7kFBP#v$CiGtPcj(jTX7qh@3%UdS0~$j=^a1(> z{m44nRBz8bYdPDyu}$=oZ!^#8I${*JZ=8vi%v>TQGtrW1*bi!=B@-vlL`!B)=lM;v zWD-??b!n91ZT5{?liBX8NsK+SM#q}S9-M|TpBm=b+-ahDL zw(4C9`^}s@_v5ltx_$3XW%afyt9^3cngYtzchV2_X3jJYOp;WS+|0?ZQBC%nIUC)N zJFy{5p4iB0<;|RzIe(Jm6Uv)8JvdX6eh4>n1`_87IMI?SZsz>NsmO18Gv_(iL~7yR zyO}eD(>FX-LO>NSo+w!ueh=F z45JxI6%#GFDlDnu^MCZb&tX&|>C8k+=0jEISu$?%&a-wh-suMS5!xI5A5`X9AEU3L zd(rpNGF0YSpQ7Ts50!b=Ur?E6?MG#vbpVxl)?ZPXXB|Z4zSAL8=2=Hjx$krom3h_| zsLZpzL}i|J9F=+2SE$UhPM~t%>1$NxS^q#~o^=wHdDcHs<}RUcP?=}_3mu2ns>6QJ z+GqzlvpQ%O^juWVY0>Ba^n5fMy#ST7)P?9=v?010ZG`Sb8>1~~5f`Cy5@PNaz7B1Q z-icm(Cd`Ht4(P^=La< zT3fU|%7wP@9q3J{oK9{=C!v%vyZ~kH=se?@i0`KAHdN+Solu!q-Hyt3K|7*( zsGJ2JLLWu*(dW_O=sRcuD)TCy&kcWt{sfJthb=;{Ku4nTOeoLohI^n7qy5n_sC4J! z(TC7S(TC9qsPxcb^iA|}^!F%jDEv3{r|2M#=t-z_z?0EJ^hvY?or3-^Iu$*ip7OuY z>rk$LgzrM1Mjt{;P`RJ<3@Y;|9?%F&*E|z_AAJt}0G)+Ok2@Q!N6+vJ^lEetdI$PE z`T|PZcIHp>(06#h0NsebjBY|-ML$GeM?Xd1K>vxpiAK>4zlFx4D^R(Q{Yx|tU4=?F zy&8Q1eFyyzU4vdgzq1x?fxe5%^`7_8FX%^p&oS@)o6vNQ+uPXI1uYAnXZ6i{FwgmW z*JAdpVPDFze6=xO|SN~%d=MNnCu%yS$A58H0fs@*stAA|?kt8`ORsLP^QFop5 zDzS{B|K#(b{bqgad7-ex_bT*hlrwAi=jhewODNZm!aPeKx(1ahx)wc`jI>7O?+mU( zZ$sOna_+eS<=O7gjc6`<6UsB#p_@_ptG`>&t!N?|Lji6@Z$~?#GF;vy5}9wq=Q> zw=MT0_R^Nq&=T}sbT-OgN`)7o_n~{y0jSgv&xnNUl8*<_tI%}xN9bU*51N4vL9@_& zG#lmb2tq?qp63tcqTA6tG>-faL%X66q1k9Y$}=IM;pkkn09}KQKzT+XREY8{LFiHR z2Ff!5y%7zgozaP?^vln(boX5UI>mn5u>J(P&(fAX4>vp4y`&$jndECEqzg@AQ{bNimceETQ%-R}=MYk5#Tt$&vDpn6jOEayS>l)ir+TGI%mJzQ0#G4S7S*B;tC zO}%RKtl~DY;wwc$er@u5$-~V*fIM{g0p#J9A3z=we*k&7RiB4(wATKfe)4;1lQ+8G zwG(t;$Z>J@@}TP|&u$)c9p%~0gRY}IyLr%clxH^&x{mVf=0Vp{p4~j?I?A(~2VF;b zcJrX?C?yXQSnl+Ujrm*Dkc=t$Th-8CEMwydp7Es9JAbRe@tMEtuiBr={=MU1#>3$b zi|JjDLrLuwVSXpFI3~{rmTmhkvhs|9P&e4zR*e2E_2`WT(Xls<%?!y zdo0(yC0!QdzW>;~Z`abj5hwR9_*>J;Byo}X!CkD8`vj6=m=}<}P%PRX<^SOvlq`kc zL&<9Ra`MTzG#rakli?2Nb*S8Sx*nDLY;95b;)fg1+wi6m!%1j6G!4BOnl z3{iXGzo56GU!$E+xv$n4<@x8(kI>0z63TPPp=6Zjb!ltd>!%FeP@Y%d{shnTqIaTC zpgqv9(4Oc?l(L2!o-6m4$q(8aEkgUC#b_!z743^kgGocBEl?L>3HAWA1$sYv4LT6* zil(Ef=#Nppt2#6o9fxM1v(YScAvy$IkLI9T(V^&JG#4#L^U$W}aqkAb49!QmM;RK9 z_C*U&?jMClpxn<1{RDjh9f|%1rJ;u3Lr0+>p%0_yMLG97!q=kA_rlkqj3vT%ppT;R zY{z5h&(JXcofPI^GIis98>X`>T3E2IdCs??sGcd zn_YP?TGm%2$%7mN=b&+B<>tCP&%^(Jk4oOQpi+i8EPXtETN3MHSvs;jW-mka0wj;^ zQIMT8Mp=w1-JIMAlfK67lJXprGxPtdWlMtcmhF#}Me@51l{|l7%0~P{DW0-bjn5=| z*@#cYBNu$B{u&gzY?2MsKn+QlmF-Ve@{>TlUP>~n&a(xYRcHT!Z2=*m7)@O2Q4WaljQ zG3A-W|Gm%GFs2Ae*>7Z-YA+9QNaJ@o3LebQ=}|Cr#NC;N-&0H^58g6dLY^gG%}~kP zrKSwe^Z!&&TS{h~l$UW(=)de`@D$+e$4Bz!En5r9BKf@>l{~jJWqXtVd;exi&Rkcq zFqYvICP$|+MGCt=`L{TDObpT_V!yH`0zNU7p0 z`IYiAJagh9n|5&CkurRU_Ca@|S?Dg5F)xloMCUx)$Ds@nXN*(M&r4II^QU{-*QU}Xfyyxhu zbuiIh2UX7n-&-X(PeYQg-(T&_+$v8u6;&a9Q&2q|qpW5p|%HDlMk@L;^{J@VK4OK^dm{%loG$ir9%1FieO#xZeSc)v) zgDU~xICq#0Fxuvq%d5E)By);mu!%M-#;teVwGP|p*>G6t5bB2^z+mOn9S#=154j$N_N#kR_W$?}l2>?zj-Nd0@+0V~5 z>qMl!C4S^o=CMv%L41D1|9*+~Kv$yu&{b#-`ZoF$`VLx$9jrl{qHEEs(RWdK9{D$@ zS)3bab9`COW(VSI<% zvmwdDpIN-m<7cvtYdw7TF@M(+*fuLq<2*W_Go)DAXH{vT((L4b^=)>kZ1gs}GpGE@ zW+#`)WVIxD#J92?NYk%KQa11S=4Ij`(v?d=YNm<^zPg!}_s_ z&N1x#YL-;QG1euqR3s^fw?F$m<(9H-K_{YrKo_7}Q7P{qQE4;dSiH}T$vL7SOAD4N z$*shIE3a3v2*Sh{(}TraV%4U3Gq{}vdVaG6|s9(wdc62oQCsgLxJ5VXphp3c&3`?5le&x5U|BAwY>)Mz7FJ|$Mab9Mf z978X#915&^_jirHWA!^fhQw}?SopeAe)njU`(sEktav1#-Ag{b_5Km{DtX_9O5Oes zIvd@MN_qZ_O1U3l@!lu?mi1nx;NQCHo&NeauoU>pHN=xa&x8T*mU1<$PVXa~5$sGUBuH}0^=Q1N&db4*m3Gz%JdaFA3cHo7X2EPa+afVyi8yj_;2=O)hgsW1V-{v%3_Pl z=ie?aZbx>O<1*UmpZ5%FMNl$6Bq8&pOv_LmyS&0vX;d=N31#?`yx0le2G$(J}ec( znyI1>%V3kI56fj$5=*r{Od{*9^z>m*2E-)NSgam(F6WkLRL(8uqjGMkkIK2_0#xea zdzcq8k2RI?9s94KcpTHm<3BP8d+IyHqapPz@o0ofJQ|}CkBd-=M-%k>j>mWHw}RsF zr9K}2k-^u0eTR5lLVZg-nxPVpOHqkOb5!DS8Tx(4oqL%SdItA zqvDpN{8ToFYcW4wW$sjD@cEjlqU(|_sY=%+ztI}cD)%>Z`Tc13!n=1&C3*9XsajH> zlHV&(xd#!0O1<+vrq1=+SXAo!36{)%Z%h@ju-~C;3Q2yxV!6jt_d9C2&lkz}qI?xt z_uQhdnxiupP?lp|GgVZ5DVwTPy=`4W``G|BPfw~fi8^F!+HLz0#E9OX<^k)+%b*JxIxo0aW}o814u85QeW z&|jj7==t!sqHU$V&_wihl;1iGbw)R$e9ux?>hTU#>RZ}G#=jT;NEQCA!|#`uZ+Wdh zFfW=1{Ut9iv7~w0;f1U_pXCCU6M^lJ<9>9`n8-~LgGkBTtZT?NPg88hs_ISA?FyXh zMAEJ*lH^g^%sFVBS=ohHOTN3JlJ{;V_HupLdrw}%cPJ$xqnxMLTDXu~a@@ zGgTa88Eom4}PH~Quk(F2H-S4?bg0D!DS8u;}CuNiTr=X+J9_TEzCo0#6 zd!Z8F@hk)Wy>?%<@ZYJukLNh-?`dOOiCt^*wgLS|VEy-_W6I`t@T4c{QBa&yG&FOF z`)#9gD`gix5t3=b6`_vj$kXMk$mqg{~jmycti7Od-LvltY za^L%*%p&#a+%<3u;nKNH#c*GNTLO10+_`Xfz%7US6v62PV5dM)|UjOGy}aD6f;?&WDS=@_fG6WVn?76u4B*EAVIkp6(EE zf%rQCf0kc!&kbz_ZTHY5C?7ZA&;AVMW^h!7>+$zT8|u5LlsaiAYdghW+urj4<;z~* zQ&69j*Qs!6@69y0E8wQXrTpXkey;CB@oWSiqtyj%e{IWWBU_NCRNGwe0Jw1ct;OH| zR_i-8H@nc4N5|D+Gbc?59jtiT3`4WB)KrUfM6^An6uf-aUPx#7QIeQ_^aJ%Nt+y4G z$=+5Mp)IJKGvQXj&4jxeZWdfBdp2B>N!rko)44g@cO`Y8(I`LL@n_$A`xrQ~&5@1h z&sN)PVnw05!1BDa{f|zJ)_Mj51okowY$|QAJZ@=*~hgI zhunKN0Pca-+svwKaf3mj^7T`CmhCM)+7FhF02y4_)V)}lGWKE0r9RPGpYzb5o;!kU zsr(~Fi?lLdiWVI=OU;iTB^V9&h?7VXC}!4>tmkev;P%`2!;cU9gzN4>zWME%n6k3$ z1s<886il4yDMZXSSVU}w?`cvSyD|8Y3DEdd?wiNvf zxSxn-#gC%j1h>WLX<2|zdeD!e-wL;-=;>|9k#pX*ltE|?l+<@CKEz^%8?~BWpB0mz5Z|=$7De_Qw-`RZR z4Y=LkUq?R1N92b3O#8^ju}_#5Ajx_k8NU6gf7GvNyf`0BhT`AoCijCv*RCQtZiGvM z`Zip$jlTnz)@xhgJ`DGLxFnh%!2J;Jhj2fK`w?7$3~q-@qKJ1rd7t5@aI0~>1MU*I zpTWHe?w4>$2ET^;9Ncfa*(v$ISWfckEZ*bG#?uAR|yZ#QB&fLa3msKQef53eS?w@dR9=A9E*N>zG`t4D0 zyTTkb#^R*N2Rqu~0(&47CZT#~9@aM!`@4HtP3N5PGT_yoXR0T=IfR$ULb58Tyo zkAX|#)gSIFaF2ug7Tn|E;(53j0G9;nM7XdWiGgre!3~Cs{mNnxT%6k}2E%;}?hv?7 z!3}{+k~IwOR=A;Xx5FI{cOTpla7mU%!kqv&4DLN}!{PS8;4}*EEV!fL(izxe;Jyy` z47l6iM!;=?8wr=r#2yFN5AqZRw+GyF;nH}19scY#j5Xkf;g9s{gRPF|lSQJ6J(P(ni z@m>#5zU*~<8tRhrIub6`_33aI!wrLb4cu_JRM&@K{beg?yQ^DJKK_kA`!k45;7Hec z0e@Xut#5umVifWhKCSx=W!Ood;eMxaMBuo?n84PKAeuFD2@oXFtI#w)qqjk za0}*@xD$$Fn69(au^c`ObPl&8J_p-eJ5qV=?O29(qB$nAE3o~oDc5%!kso_|TGw}eooLTw#O?hv+A|BcYy(z4D6>6DGoVq;)_T;; z!Js{x=|?cp_%nXK)^iKc2I264_y4P^;9d%MHQa@8*TTIF?tfz&IiLsF$GEM?FUcG2 zTk6(o8#%EWcKxS%n|v1lJ#s=B-dNJT&7jpcmj61ddXhhSW_Rc`xx zBIV;V{Mp<1ad1?I_4w=Bp*BuNNbg^}d!W&Dszs^kDiLjqO&1Ig-c9GVf0)W>Z@U__ z4VC*ExV3PX!lnLP3zzC*8QlM-w%d(7+20ek&WSx*Z98;LSK9o7a`%5%AElSUsF6## z3+5t|+ym|X&)0nTH?$G8VI5qW53hww^Wk-HX+FevNx2QHfipX2fALXy9qWTHA}{uK zw9bXyJKThhruHGL zf?Zd!&V&A~w$FJk>~|^19UEUV>p$DmX3A z9=Nq|?}bZ!d>ve>ll$QQH@4;R=)dWzPN)}!zSK+Ud&$H~6 z-0sGveC))Zy{&01qcYGK<>**jCnKo$uZ;_u&JEcyf|@WGsrzWcHjUd)qm8Ki8{ks^ zd9J&w~#0SNB%qunB1<%C0OZCq0YU zI^@yH##yFkeCY10x?)4co)P=0!d__1C$2dbMrMQUO~{P+|v z4@L?{Q0Ua;6lBB8&xtA$hd6J1jCT~rh$DmCsCxO!aVKRLPs}c#gHIfK@-Y6>mc9ji zvk&6jc_IZ#c23WnkT@wO4Sip7e$2&Bni88h9zrI`E=;24#-BGn1wtlSR4;<3Iwz&1 zX|6kSQ{tR4Dfmu%&meaoQmHx^o0ge0B{4BGIVK?mYk{6Y-A7RJ+$5RjB}`0?iKEJ$ zm^^7pQaqxJLHnGdy!qL@rKKcH9G~ixz7Qi)rv|4OyR_t01jE;BXTY2&QYR%&MSDz1 z9iKTZCS_u38X`gEb9u>!@KZig6DG!Uejf}4DNu~m@sp>FPfAOONz6pHrz9c@=@+4> z9}J&BAE>t$+!=$+Qt8DY@JF3&M1p238`@@ zF?D=;rjwf9 zo`+MFubzS`A|Wn;b3)$PXKE(5N~Uvsip&wk=r2-}iSUYyM2b8dAtp{qOiMs#^68Bv zfV??GTugH66dyH1MI#@*DDU3s7i zKog}U#K~s2l+cLcBzx}1qjPhE8ud63KCGSI5{cm@7`=5uTI{5F8fq{uSiBhN3=s)Q zQ)3{YUOtAYvWJL?G3lAHDU)L2lhGe(u!lgWCQM4=xgZtCwfF}uJQELH+%bg(vx{AM zI1L;-?eHnvaXD_e0V=yRwyY#OuQWfq+!YyVvdLv7l?#GT9T7e@3cCjVgD!3^nwVVL zBBr+&sUWckGNrj7X$wkSd8UFv$(mR6KsTI|Jr!~E^&Lk=aXFVK7!M)Y?*RB6JsL*I z%#^gWgjf_Nt`MIJmYa=E!ObPdSgJvuo5VNA<>qIX1?SQu&EQj`aG;8R&`%gELo&;K zMHQ0is>Gwu*adD^dFGf1yxZU()XkbjYs@;6oCG327QWN5ZwkA|U6ro9iP$`4W-tV~ z*X?AD1_GNIJJp#PACndnB_a{Wr%+vddd+b+yM><$*AHR;#<@jvaVB`P*ig`}2#OM| zU^i&XujI17)8Q{?V6#b2uE1$XYUe{zNuDbT)3txldd_Pq?02;9o>aHu35D6S%em@y zo^FZFDx21a-rT;_E@z^K+R`rJV=*cE2i=UC<|6rgZ-!*z`Y=u&x@YQqm#cI%3vqFF z;W*uL5HBhIZ-uwTYh@R&N1BC;J-#@`QTVLAq020&}b@jQSK^M`-X zf*|52X5)2~%F&ghp)>gh-EWn7tEf!Nce(KS?^z|BGFAMt=4I5naYf1~mFd#v$`qGh zQ9MVDXjD1Q<0xa3u$QhdyL3W9A>L|<%PuU;$2HC$8oPW^K2F(F1l@Y~5NT6}svlt%!Xl(pJXV{~- zN*pNtJR>H~JE;xWV&xx{5KK~PlQ!%Ip{F1W>zb!BWO1FQ|&p7BS$8DV*EOQF= zs$i^fFythdFaPmCOfR2tnG3DGt`z3u|UyWD&iXX)QO&Qotz9aDEn8aL)!#|`VW zs>P1S_>u6MYV~RzVz8AjwIat|=HgSWd7L4YD2zuqr$=w3`L}pBI;0->xF)DSo`E1S z%_gChFkN;v?$EIQ!I)NNhBLxo-tiB5@_4FArR!M>YsrtKJvE;9xgY$?9P=VX0KR)}+owqWQ+L@=jr4K{*C9SvAy!OA#xLB`?BO z)=Y&ayUNP(=-*Y0iK@6@R!LzVRS&6n=MSPlu~RZr@jh#zt1{eOGKTA|wzYbLMoE2d zCr@D3PR4XO7tx?ed&HXDKWGb290o04)1g^3#B)O7zBt^Ii;PUkUXYtz4rLHC3^i>R z)_q%0AkG-gvjv?ho8z8}(??6nMsqfP4JU?P7%HDtQdTs@jR}Y5m3L3&+Mrj|U9_#p zKPVYtOWpZ6W;d@WCzliup4=LxHfCR_80v3Y%J}h_Nt5EobN@RY@sMrA<++?=Qvs=+ z2`th25MNX8pkZnd3j|sxk6z$`<&Xx7zQ<5Lef9zB;<95$VV}HzP*Gp<%E|%0*yA5` zE7z*epn5)+J?EO%s(18RoSA*T>%vmMTnkjcWG5?!+MVf!;>hclOWLR>j~WBRjDOH6 zzO|q7{E{-cwhDr$>=U>ZjRQPMRBmrg*Bo^wOi%tn^rlFTTyDrU4=hIhLD#YpOM+%u z37XABEi!B{1&nvi%Eo(5dOY<~jA$r6mxWKYfOY8B!PKxP7qlbQjJS0Z$nj6aPV-U9#DT3p8Fwr@RDV$wWR^ZMrisJ*PCqOIWG3S`(B38Z4 z%!ryHs5-}Zj19cDn~FC+T$OULqpADD0W7tAjsQs0dU=7HrTjA!{Q9|a~&1arPDDk)b1x~SR?VJRhbxya_mnt3G!JdKcD;ZMkPTb8>K zTp`n2QxV35vrhVIKPsb-v5M6oYN>zuZf_nBl*G~0__gmL3I^WEQ(|CBo&lR2nJx5? z-5Y_TF!X0;7KLLaO9SaZToxAQ70knmgGTKSdFJ%)Av~=f%ae6{L3wGm8@iu7OP(^^ z$H$GxNW&xdE2{JxSdFBy+?A&^MNegtMBpV%y`Jix>_9Y-l_9qnfoaH+qX|!`pKz}> zjc8IN)S@r|!7fJ6qJf5=5|DndLUlx?bx6UX#82*no#(}_%2G_Lt~|X?V!f#gYtc$c zrn#Sk@w<1V`MqP+n>=nuMxs*}(R+G!wTTAK?=c~1aWFf#mx`|%p0fY0*6PecvkJDI z*{#^x6M8H=AM60Bj?k0$J;(Riao#CHqYVQek0|~A{RNjfwU>)5jjqI9289X zr{^|CB~2uSmd2usI4++r6qu94D10;!<6m~Vh|p}K~)-Q&4HT1;FT-(1Zxcy>mvFA~CAFjU83RWYjo zpBjR-g>2faZ9K%q9V1I{=U4hC!g@$ac^vM=XmcF_)=Z9=-Q@NsTsaPtS z2Hy)w&TX}| z!nlZ+vb9vMDLp>g!gkw>q%E}ohGW(M?L%1H1-P z%{SGRUyxhqQj1$OB3TH+ea@gfyoFm6GCKlHy_UB*Y5d}GlE&qSAc=BJkPAbe5SH_^ z6(6e*OKv#^8Y+T)r>V_S=K723KahPJYP-=ytmo@?B4z!4w$B;oQb?Py=WIjrT+2rO zloE`O7$&m|6Um^0F%x4b>GJ=!$usIvCqfzxsco5t-bS;`eqKEI81{?>mR`I^u}BQT za4Zb~=0gY=XXqIO&B6y*R((Y0Svk@y`!tV(<_IVi3hr4At&RGlMsfd5VzZeZhxtoL zJbRAw)YSL}*`atGNO9p%f48ofG01qRZ~uiQqyfcR8BX7CotI3w;KOlV$J@LOCk-8N}N!J!?t#>6de_ z1Mq{UjOIP^oWdq6>PY=~aQCGsT6-^z6C}IQFqdE)L}kJ5Lp_<6Bp_f6V(Y^gmWZV+ zRGwS6ctp?UdC&Ilm^qWkM>$(qeyyp~*kKwsXkq#+Pgv)dV6vUya^>+OqcY47<1v?Fca=>k$m1dMZ$1iTW{Ru`Utkc$0*?0I&>!}dC8bW7lrk|h zE+)=7p6xbse6J3X5RYs$(B91|3n^a(x#m}A*cf;|j~pbbuvc+~mUD&LA7+|0%Iel9 zJcX#m4}D0*ViQ0@yep?-c6?d( ze9q%PZ6p?##(mPs%kg8JZq9<)gDc4&tnx<8!+Nw{v!?GuI3~QZAZO>l%TUX>ST59PfT%Miu~3K zt=*4D+gaA?UwRHh+$T8?*B`;jc>o?Slyl8BU}_}S}7W#DI9l&dtGEJ($(u|{-fEdrOBmhup>$Xl97$YbG}<{mdJ>MPpbl%ZI~aO3t6)~4v1&## z7qR#N9mh>el@Hkl>A7IzPL*bKQ{&Wi64MxN8bg`p#VkJ^xXSRHn>|nZ=ec}WYYOOS zI*S#y`2MoClySvk4xp*l-P~Q%UgRp1`%|d3(^;WQB}+KO%G@zSO4523VnY-2)Ul|1 z^<2JG=u~({rKV)+@sZr)y*FR+BloXaguHKh4fNbqhVzi)+jlIE@|^9G&)vw>R@wun z8DwYTL6@7u9`HSmTXkA)SgO;$yxKLV9n^(9&Xb?+-@_v1LtFD{3XI~e(!eVXt#O&A za6VeXvg?6{!E@Lq;W3DlO8f(ho0XWNQg+nvjqGeB{rttC+f@d`Pp3 zM-`s|)P@jg1o+c?7~?_o9UivLSTS4CsKW}`ATGG?xUCOEc|43_iO%BaY>QX!{`44P zoVA16R@L5nLa0mA4m3Src!ppJmk(*=rV!dnL%NHclW4d(mecbba^(^T54|nx9J$-9 zi2GX-y-$#>Orn&9Khc?W7R*t_SS`@w7#2Pn{_gXsP4IwBvszPMOH|g<@cK!b4c77q zI-vl2?#xzU#o}UPu#qDT$4Xl2w=MM!vO?0fNSZmWVY{o(_SBC;<AR>6)f5sN(b;ql*R)3rL1Q}a`w$oAB|EMm`d<;T2q z@|lEc9@)EJ)J6=9=)CCKry?eOiAQ-D2fUtf(Ufo@27RC7J1Z2)UZrPIr-13)7pD|s z`v#5Dmi|bZ$Tv_F^|k^nLp-VumR;3q2<1r0kolx&cfImT54X%tKTw&lPy1QGo1d_PrW<7niOOdO)Ry02-~Qa0<;XpLun#G>BwC z4?Lz6kk++>dk>_>^ARme!Wp!6GwM(@oZZO7Su?YmZR({kl$Bq3UiMjA zJhxniIBmOm+1Pkxb90M*sOLtd*@&N=tD&dar{|QV18T1Haf~}>c`w(FRXWVtrF9y# zPqmkXtsp(TyIeXKO>T=aba$y7koECYp6)$opj0T&$z?8_mrf63NC=j5NAy|Q1+;K8 zmL#U7-`FwAE2lWmIh*YYYuEru6P{rjIFn7BHc8|9KenX>6Dd2!-Z-v*TG-GRj7TEo zHZP^iQ+=Jv>N+j7cSU96wyi@sp<6Y z9ltuqwl!8zX;4Y>u|_8i%DSMJMyp{g7nVmaq%_>eb&q8nKiAM*BpwerXz!W16p4c8 zo7?CaHe6}Xy$m?zOD$OS zQiwAY#7)?;M-;}~Kt$T)93EsXo0z<;8N7X(#>`PX!8mxj_Uw?TSlhO8+5SDaigb3R z>cL~^R(^JBy8~l$aY1>ByR4+NAa?=|aiIqea)C_`4&L@1#uf?5QaP*Jjji~XF_Vf^ z#btsq!fS=jgUBmv$IXl$L@7!(TvF5|Hq5qrIi z1d(MO;RjZ8(p-2Ki?*BLQ9pgy1sm4LiXH81=r<=i(n6o$4hSujwyM&@0KI{Wl)$Hb zSCg@chiiiNk;KY}R! zKBbrPczz7SpkrMwXU3$Y#7yT~^L++oQ^LorTIq$UWlcwO?zLPgQWSVl;!5Sd{WVlt zyTwK4fs4gd-dxXyhJ>cJGK&Z)2g8#TFP|> zOV5!=`!uX|uorIZ7_O~U-%7qLB8Q;`ZfbLbgjY}EAY>qV%Gz{huDp$39D>T%i>34Y z?A($ZJU|{_>@Hitk3l}>sh{+@W;W2#n0O4gy4Uj@>bSHieWRxY^6QLuHJ3wU=;qPY zvYl0pf@GoHjY{+(gMx;U+jtycX)pAC&`l%7d^J;AkGrsR3fj1!mIu_GSD;jx$#~J8RNk*RE0!r)&L?z+E>8edb60aUXc@-TMJe)aYDc-|_c@H} zu~_y@$^p#~?|as@IRa9S{CK7BBf44gl`yh0(PqeIdcCKWU)sV-n$h&E3)LuoRwkc% z`A8hEP562dMy?5N;_O(bLv9kv=`_?`TlUJHF_x_}bo`h#DQPAr-H8tP_PRrl{FQnp zU-~-_--{|O=e>AUR^jy=8O`xMisz;4czp19nqXBK=<&=l%e>8n3k2ENhw?<~83sMx zH%pJ=GS#yTHoZU?Vhw6h-aU!g=3kw)T`1Ly)qdv9F!((t9xDcY@NIGl<-;nTgM?YBfW#)ITnfy$jqaXdel!TZGue{J1*{ zd(ZEdQ25N3-}HKM=>!at^m&v(zl~EaSUfAISL6Gu^S*S1heNweVZP7LJe#ZHi|8Y)_Zw}nl_vsRR zW1%a>KYGZ~b3EWxxFrZ?32wn(~tSIWqVF;TK8_?j5o(_n2}lq{|_@i^0T}4 zT-7jU!e`Yf@9#S}ITqjNV*ZOh0r%ZpUsrfxj~j&p#@E&9K)`dt=$_3zx3B?&L`1lld`qUp;iz*Xd)A{c7PuqZ6|4 z=i!DKgwvw~a}FHa`}z_QSv3Qldm8h_g{MAzcE8HM zk3IG1?{0eh;0iv+6#m~nef0d4-kDhqr#1GOnfk;Z_&y5zf9>7l$FKc*-}}AFE}LY)^{c`R7@Fe?Hk|M8^Bqoi*z0Yt{&{fcYse^oh;9J+$}G;+&s8i?6Z#_Nttz3Ld^9YJ(z%v7<9GAYScGY`d zKC|Jy=jUOs3-i-IpStw6tb2l%js4>G_Xd4-8P0iU{_*Q0=57fbSuy$OQRCjIpMiD{ zbx=Id5A4}kG~v2GZarnPzvG^_@DQ+)`QsWM_{TkGt{?O0r&sh@n;3XHzO!ciH_`a+FZybr-__TYPwyEssL#<4EP8E1 zRm>BRE9N79KlZ(>am#OB6*X(hQPbXf9pArUK4sb9t0TJH9{I}?ezSJoJqYa;)tlle z{A$c62YX)p=VSkVvb_7{pFwR~&HVNq3j?ati$2)*?b|o)K5hl%XFv0=cMV%MD|)oZ zK05c$o^_S$@EyvdD4sWdojUtpSC?OT>qqY$v30}GZk)Nt{EDml@4fw%rPvPAoC}ej##tjyS0f62cCH2HAl|PgOU_L@%)kAE9sIiyPxDA`b^Kq8rukO7J z-_?QYhx*+9e4p$yUf;d7OY-FD?_IVF^}~F{mWTfMXzsW>FIZUd=21hpzmNK1KH}G- zZ(RSo9KZCr7C^5^)j3C2pu|Kq6*akI}{pLfrr3x>SB z=L{ikWB!)9!7IL55w=XkuDfmEx#7PH(X$`<5Buu!XRkQngR|CuTzk~-A7_W-hc?121%wDzq zxAiy1|1|T?y|3MRuZAf&FOYfX z4P$GD%v4SM<~WKcHDb@la|>^a z?&msb(BQF4e!;xPyt~h%1Cmlc`{2T1%P;(~X#Z&Bhxq}c{(W@j$4ei`e|pq=Po}4S zgYO>UiEp6aQ#HT*`i{HL1OKi+Yw}r@jpK11IP+a81mg_e<)1uig1<&HbOfH23A#?|cm3SAvNo(C_86s<|iKF>34J z_kLZUUYh>|&Z%bpvFXHt(UHNazpr*;oW`~ z;%Gcm2=rSr^SRUSIO?(JO}`G?+|#cM=8AdDzdkzd*!MO(ef2G|AwL`wle7r(FZpk? z_pg6#=UW$-U3H=R)zcsk-SN0K(C>)n26zAFv+GB%yzSnr)>q$_faev=pRwl8ol_r; zYigK((U`Ap`ZWpl#{5_BCoL`NS~l&Y5ertFFs(b}`A6paI+isyme06pL_paCPak*< z^*j}22=x1G?T(R0)m{`^I_|-@*CmvqyiYRkclD>QENRI7%74V~^U51;y&m&XF!{f& z|IB-CJZ5OqzL#FizRIr$(k)_sY4?`~j=du?^Tf@=@7eHRHOA*xng2a4p+{c)%Vqx_ zcHGV1=EcpzccKPSJg$c~UjB&R1M9mt44o4>a!wY$jl%r-V=uq{nfre}-+57Dmz10K zJ&5xzneVx>;jXV9xaXD+OZ^(1D`sNM7&w^X2|sD?MGb{lzWKo9AI`Yx?cM&+TbQq0 zbjx06(_1I)eI&F7pT17SxW|0a*793JNB{Qn@QdFY^y5=mkcF;8D4r|+{2{yB(1x+M zJbdYlUK1w0jPIi|-}||pAC`X{_QaCjj@pr8KCFJ|B zrcaw1^UurA{0;ijXUwmf754i-Ke^@E&~@8yTQhI{T-5VWif6zgclR-Oxr@UOys`0{ z;ivA!Jj?to#ap&N;;R0l>eZl^d)+cC4d07ne%pX2z9`6ftnN#ZQM!HQCGbCN7{znm zpAU|{?9V%%{`lF%_`X|TtitzBn13-Pc*9L!-}~FlqrW?N;;>hKLwhkl`tiXdN6(FV zq^hWR*N#WOdLIY*g;G3?=iavR)$hlj^YHcm{Nju=wcTQ0;3=2vAs{N>G87FC><{n1q;b9VHEp2Ph1hkly>*t^Hi zOcpg;VjEUni|@%{Eed_F+e=FyzV8LsyJub6_rZ!Kn7=ZZ-!(1pzQ_X?^?k-M^Y4zL z*aetJn7{3G=Xar-hV=N`y*=~Jxn|LG_%g?{^=Qw(SOHy#e9$J%dc3GHzefusLGrd=YIA)^bO|kI{5a08(lMh z$Qd&Ki>vy@V!TZoLGer)n)U7NeKyq%n>lQ2=+dticRdUOs`>dPWiX4WUGIq3Qz#(Gpj>n? z83DX1M^6qqUt!eyIv-1JnLE!ltGx3OVLxE!BSHP-R+P~v$rkAN+R}cq3G~R8F&o1O z-u6Y+L$vuT=;ic`*;U#3EaC{g!h)R6$1^Y6toP0pF}JXwv=nEz%q~%#xHEmHklrR$ z;?S0CdGwswu96}=)?ZM8^P^-9wIvFBG8aVR6sDXFx?*_nEC9SUVY z7nqt;9>s$mf$hAOOdhHlrD%EPhl#sG(dz+E1Dvu~FuNcx2k#Xf%0~Ljsz5y!>`>{o zkXptXr5f_%>h@NEu0#z?jm@A~A?k3%=G>#_B|OWMJGsq!9gg0}B)Y2s4|#r(P1-sv z^G^?6+M8Rm)ilz5E?4bN@1!{Bh%K7E7w0N#Z_bT6&6p>TM?f{tr{iWjR|~$EI7ZIf zpG#fPW)@FHc9`#cepGqjW?zAZrmvT-|UWEy37|S(x5_ z>UcAob_|97vVPW~h+C>+`l?$;8qY&dz^5m1mJ5!go!{O%Y$F1k5xmJrIV^j zT;D>in(x7MJSpFWD8clFPma)ewWZkI2!(_{I@0!JJlZc?zPDSFb1^LMotzSV=NHK{Q#^q>HPq67L{{X=UWx>TF`EDWJ`JW zoyE2{YfEvL^XJFR6x!RII&KZH(&0tCL0C+`of!rAeWv#2&JY$Euf>wt1Nw%gj2(&Iviwj__Db+^ z9e%#ijz@&e>IFK}w0EQ+x3n<3v$iWk{Ls?08ZN=RO6}g;(t38$ap-)zPFAjNMPKTX zRPW}?uNfWE4xpZgw_gjj*Gn_oj36ND(@MsErjBR7nIw#e*+9_t*gbll-Wb%8XVqHF z%pp|UN_lZP%DmC`{MjqmoD{XFK(0*|qgG`*j29loSE~ptMdW7;JDy9OH{F{JZIB*K zwQHs6kwd*ZOg$>=%ottdDk^D@oyQ|1+4xKh3CXDT){&MH^N}44nDoA-A`U@>Dkc@L z@xZQAb;UB#-mGaUusjY|vq#4^OnNlI+zPydheFM2N4DIuI~k22ckZ<#Jns~3p;+zP z{;6`K<2!WO!4?)BYsZVHqtLxrKB|@G>yA86(lMG!im!>zq9}GmL(!?|d@GClAOO=CPg~CzN$jb`DjD@e!!nU{(6YSpo{Uo$2Q=X@xE0rv0WjD7~&_y1K3;L zOAJ%UA)^A1pssiqp_kaIkVAY5^k)!pUnt}d-vJ$9?ni|j;&-5f%>Aj5LpZvjm>l0x3OU38 zAV1~?D&!C&fVwajrjSFN1JsSV7=;`n35dSe+DoJ;^AofqFCdfkF-u z*4?P*F$y`vD$U)hxzRlge`hM>5P6!**W3@9`$co5*#EEEQXz-9O>=i@?oG|nTbdNY zA&!H9%CILYgmg8RuemQY_l@RCjxfTOE94OOY3`qzo9rV<{s4C!e?&pt&xP3n?2% zDb!2!(cDRz8?3pJnj57#dJk2~RjlTcG?${enVQSdT(RcLGC1 zg&d+DD3a%`4GLj?>xcLLn2T4)AvOV}GPhYFhe*adq_3i0dx&dV z0P4fs7KI$*6CnCjcQ5g|LJsjgP+#VLQV2uJu|o7?uA4#*5d?G$bNv)@h`~U|GB;Eq z%mF|$f3GU!5Oh+d-|Y?pn>= zpt(CWw^nlxY3?!2J+HZ!G`B@_?`rNd&3&c0A2j!i=KS#9t1K_QNlOTFs=0oe8>G3D zH5abAGc=c|IeG(E#`ox8y#LMptzIFA=r=^Z1K&#=r;tMg0}bH55TcMngae(x+!+cv zL@dyW%uP_pAyR=(Vs4s3&^LevGMBHALsS3-Ge;lwAmk8N0S#hqsX`8MN{Er?(-d-u zshXRixjQs>m*(Ep+y|QLf3gwZ2?{wxw&q-#yGe7mXzpXp(OaxklMXR-s1e_(3OPiE z=IF};(%&tbyF+tdYOYCh)x(VVu2u+RqUK)K9KD|^+cH2Q=+v5v(cEUuHEJ&C6eDau zg&bmr=4NWHPID_YN8du1>AtJE6HYa_V1*naMswpeH(7I2G?%S8m*(bbu0nH*G`B=^ z*J_TA)|K^qr{>mbjy^^t^Zc0Rp4Z$^9u&BbbNk>==Nc&ZJDcujL}Y7Phfs=Df?kVDXyJZ1fz zuerZz?t0C=q`6l$*KLdu)?Xoqn5enQn%k|pJ(?SSh7tC3g&e}Ixk}C5qq+Mvhcot6 zp3hRqAuiF}<(hj@bFXObcg_8&xyUn(_@WeYh$Wi4MsxRT?m^8xrMYJ{_nPM3)ZB-f z`$Ti!YVJGD?bF-=%{d~B{2ir`LmaQUlQeg#=IC3%QVt?D7o|Bm2u`+nlICV;Zl>lg z)?BgXF45fOnp>*56`K3I=5E*A{hE7Fa~n0cNpp+O!Fe6rr)v~)h>M~OE?XgoIH^BZKxxeFSI8k2PQY0s%vCAmz^Q^lq%+q|A%|EDG=sSsg&e})DbF$L zC5}|cA(jEnWPf!EIYeLrY)j1bRmdS$0v*NNDuo=P|M@sGfw>bDa)?`j`Y^XzA?Rxt zVBN!9h(Zo=H_$Q6ty2j0#6+Bj!`ujk9O559bl7Dtv0fqAv?fB=V{VK>u#o|s#9X~X z4iS+g#9O^7>^OxSVzuV(*4!STuesfRRtW7e31_Wwe3c5JJ%A=Lw_hQ&M>5WiW3Eae z2O3g{Da>_K2<-thjky|y&>kr`7lpYa6+(LeUC3OWLTHavoR`O3Uxm;fK$*;~QV8vl z2Kyg#Cn$vW019AkwL)l*DOkfY7orf_1L$bx)+vPcn2NP2b0ZW&djK8F+^t?5|QGltXj-HJ9uX;v@E#rjSE4 zX>PaX(q{>=o&9Af^9x=NQ~o3OU5RntMQVPiXFG%{6LntLEwo z@jQk5`AUTxqHht-TjF&4D+E1Tb1!Oco94D_F05DxvWUXgr;tPJ(A<}rbC%$F52u@` z5cC6}FF0(YLg)*n2A8K0Y=S^L11OEn3OR&xF3vvWu!#ye#5T=s*IaZNp7#V&*m#A| ze}TT@u$vTueo$_3I8K`HI>c6>U7YSVg|KFKV~*mmSqeEsw+e&vR|xR|?dGth3PE0g zzTvQY6~eqQ&)`-og!ty;oFxwHuMp-Vpe7Dmr;tO8sWi9ZVua|5XPa)4Q`o2(BXjgaM+&}!dP+z>W{-#Dug+?%HU2= z2)0e2A2{q{g;4j4a0V)e^;Zb#YHpe4_5e9pu6|Ys@m+~>aM;BPImBtz1{banWL$H3 zn%e{Ptt^K^&}kM6aWr4V$LB`7baail`fK{U5YbGw0lV1IiQLjJBYxWx)#>;&4+ z>F!ntvU@eo*W<9I3OU5FH3m08A*``A7pu8O&281(s--x;i{rahA+$%W!JVKG@(1*@ zY!8J{-eurqc@;u?Xl|M2_5gh+>rWw!r_0e7IP5}&&}UW{T!cdCGeF(Bo>wb`XVHH{ zU*ND|3PIL1_p|2G>+rlgfX0^$g)sgB{l;OxR0w6e*5DQ^gmGMR4`}XP&3&M`?$;S% zk5CBZ&|HM(@-&yPx$8A|ljdI3+$);9uMQ9xZd>}G|a58Z-uY&mR(LKt6e zH8_8T(BFW%a@bOZ9AZDvehw>clL+#sP%rVb=F)G+z6>dU3PJt|ao8^v!g}EjgIli< z=Ka;!zrkVqD}=s4h{LW{2>U4RG&r|Hm}`N4!y%HVfQP9`RE>lYg7n*=3cZL zhmBAOx&TlY4!cPqwBiJ|8xgs?zeWmttAqTzmn+o%xMZx3K^3b*eF zg`gJ$b>py)DulJ^KMbx$A?U0?Jvr|%YV9QkDum~VKqoSHrb1{BTwg5u_4_%w*U|4B$~TR#;zNQ=IZqhh4DIfFw_&O3$gkEis4 z3yOnt+|%f&!UT0xVPvFC!SaO|`$yX%gUj#=N&!xG3@*!w2_8BWPAo@C39DZ_;*Znk z$VCPh;T1`2^*3XzD4tVXGQU`UXMqo!3#NkDlN0So@BeCfjQWWw$DUw!a9m_Y{8T>8 zGq$C>atu$9{5dL)jEi9ER?I5bSQHpxTF^?11cti7Q9^{3j? zduZThwV%!^n=sCJnfLTqeLAbj;d@8=o6{rnxiyP2XBCu{yC;;nT+Zy`yh4}Jx;QUe z%F|z)em*A}92Fc!ysgULG()Y$f8Vrj)l=0 zp7Vj)%N|@_k)sDwmz;m*;|qqfgDXmd>1B1ETJTv(`93DkHhSDO#*;X8(3la%@SyMG z2p{`B8Uz0$^3g(lsPg7!7Z;c4SyfKG9uuYV=QS@6?tcAoqzhPoUDZXUa_K(akvP>k;<;MJGHRQaMD#oyXBz2I1oTj1tajV~y2;U!+o z!(QR!(Op91XBW=GOoTH=$^~|fdtAGVN|Q^*2-?lSIUiDSFA-?v|P&Ogq1PAr-4DodmzjFAak zPbtOgsKzy3Df76GYrfA%9>ag@`S;Ay$Pi#TH3B}mVpX7R`5Xq_L|_w*dUlWo^~ zdU)Pnk8A7rSY^9Twp|C?t{X6SL>r9_H_LV{Y}XB#Pps+H*{-u}*Yrk@)jz#sWKECW zL$Y2A+x6-$p7*0|*NvDjtl?>Xv0l@BV!dt@p7~jAyDqg|J8^AoA6y>(9j<}HHE_5F z4%Yx`V1TU_4(lJS=|lf_^$)3c#M1hl^^i)N{*jDp>wFz-yFRR+cZY2L2zZ0eXIJ{Tz< z(S1CxsVK}Y(?l>PWvjhn5BylKt8g8SKjW7SV7+hf|En$@uXy|p*QZBywEMzdpKa9( z?e$I{(xAi*J6lWpW;Ur@l73l(KbYL~FW+_@jqCqr`NiWqk6%mWj#fUY-2XrLOK)R& z54FF)vYtaxCab)vBDUF~wzvLTk^`smXvhmptsXx-s^(vvat(j>Gz=Myw)jIojn8&x zi~nSKtm(H@?!VF>eKsu_Q?9BC?5V@2+G6M zO-R;yf0ONco$b2Db{&oDF#H|<{WUd!?I<3&@VuKA{3(jE2H2e@E-6$;=+Ie zfVzrkpg>0HKu7T1d?0^Dl|Vfi)d2NivXfIF*BYJax2qQX= zW-y~rph1ixfPxu0fd(>42ReySKG2DbDuGU5R0A}C(JG+h8Lb04juD+bI!5|C7AO8l ze?Y0yA5aRTdZ5XSHUT9w+6FX%SqrE^A8Tt1YB9T#lpbHp<0-et&0w{rz6UfOZ z9q2qp`9KpGRRWD?R09;xXcbT#qjf;BjOu}67;OTIX0#3HTt-bmQH=Hiox{lgI3dO{ z>JM}_qfnqoMiD?~F>(S$Fxmw9nZl?pScv67UBzmk6^!bEDx^OkH=}Jp<&2tu${6hh zn#;(4kPxMe`U90P3I!@=6aiGk$O%-)C>>}HqkN!?8C3!mFscE{XS51vHluYwvl!I_ zxfpE%%44(*D3?(aP!6NLK-rA^2MdwKs6S99qfnrkj3R(8V&nwMV3ZDYA)|bt8H_4{ zrZd_*Oo(}moS2#}W0VfGkWoI+rHm?pE|LCD5#n-2tALg;S_ib4Q9V#KqfJ0pN`I#c zah3E3^b}B6Q4jPqqdh=JqW&?O4##;#jQRuh0Ky0d)SXcTP&Y=~fO;}&0_q3URqO>i zhEd=M^fE@lKqoSa02;!`2^7L83+Plvr9i_O)c}PvS_L$U(R!c=Mh!q`G1>-nE~6%( zXhz~R^bbaXK<6&= z;#x+*K-V#f09wV!33M}~ETB6Wl>)71v=`_;Amlkrh;@wm1KrCg6zCpC5kPAhIf3qG zln!(kqxx_m?q{?K=s`ww-r~O)^#^(ssH+GCdW=yt(6fw^fu3WO4^$82C)NQy$*3Oa zCBC}}=w(JbfHpJQ1M~(X|Is)diBW%`t&GBeK4cUP^bwwvyzR1dU=Q6tc=jCKJ1#%M3lpN#0##siFkfx2N#=qkd1x-)VD^LGDp!kq11LPSXKXG|tNLJ$V_>es3^0bhACoYql5WR3-6CV;he)Oy3 zM>hmad)2wTH<9v=1=kr76&j$_0B(x9kfJW7sNEEGG)ItF>m4QM)46D46;jE3k;>-z zb6%4c66m}pF~onGvwC+j)k0r*HEN+2rEpd+49OSnxlUZ9=rgb~hM+((9-wN!e9jF7&F=F6A6`Jv8Hch2s6ksuW%LdOL@Vpo^Z2))-?yV<$C zAAG1vs(r;-y)juA#hU*`y90a3hFt7tDZ;W4+Gy{5WpN0-oJDQwl(*oz~ht@yf0qFp}RhRaEB2E)kCP+ zI)qAPC7^hr&gzC>XKkb9zG4FvYxrF(vtNs>C5D9l6c9K$j4CVISt|>6FgcWEiYgN^ za!rDWGdCq1Fuy0 zg|NihO^LP7Q`)ONqSPHORCYLWdIwzn)Dg%iIvic9B3U~c$q^+_^+#o4c{Adro0N#k zW~0GV)?`bvn9w(2Y+^#x!Q?Qisd|n;xm2|~&!sGR)}2Ru5eSTy@;8%N975c|lPq0d_+9bT4k1OcI20zx+#MLL)qEsJtYtEoFX zn>s~cPn{>2;GL^bOplUzl|8YusZ#{@)RVdFyH51zV%(sp4LL_ghwbd&)3cSEa8pa9 zMO;M}%TPg{qzEJvG?@&`~(hb=bHHZ%NPL6B~Lb5Fg8Eruy z52K<`1ae45P1V7JC+XQ1tLQ%3g8ca^3f(`LTq@h*P1P12DXeZKg>@aa zQdU-pXI@c&^{qr-uc9Y^zM`l52kWXR=e}m9AG%Wc)r^GXoT~Q8t&NTblS~Y%mELvd zYOSNIb^1#7xWyrjcvwswj9gTx5lnleP&;ss@Kayfk)>4pfy63FjqLp52 zWC*&6Z(AaTQq$-eomo1hLH8(H3WuhMcLZVr5Ie^}-yQw7N2O85w!xRAb@7ey-6<8Q z9qQlw6lmfk4yYzN z_`q!JJ)X_x##tAOPX!52v!Cth6{A>8LtE7DE0B9xkC z@>bUv%-4%UnovBHoo`z+M*irYwf)Rkqdj8{w#3Ti+|xp=bk7p&&f&aXv1p%$*14Wa zf-L4E>+Pt5%TDoCo|yH1s$nTQuKQh2P(9HlEh&dodbcH{GuO z+_6csOZNAiEU}&p7VepP!QvTrA}w5!NerrttZ+;;zOtInYNzEMiJerUiFDR-1fe@= zBrvi-^|Xp_D%X3xu$Sw-kqRo+L&yjybG@)yg|{pNBxN*6qiT?K%A<6->Ig!mgbAVN z=!TtVQ_fJn2C!V!lugcFbpvXR%V*w$wm=t@F^Wb8K!b0?1^vvxm0==aF^h!}UoF&F zBqUG}oe<~0J8QOxnr`V42(`3>lEQRHu5b^b$R&lI(obKZy5W~{uq%#8T_;9e@Ty07 zArItLi4hmH7K>OEi0FgK!Q_K!>X2SVh@c|)H(vz0Wi3JzrG+AptBN2gqX>L;2#NrE zg;9i1OD!bo@~-3-GeqiOT^%(SYGn`ChT$Uf%eeT|xtw%C_f_X&uiUxJI>PWW$&#KK z{|*)ZUKPKrYN+dolQ<;I6sCyv^V_70p@9}EcdXP^oJh<;GTY6diLzvvuC%SJ-hd4OB~Il;c0E$yg3o3#^6Kzu^EIO}ANDjoy`2MroQNIKO`T@`@_Cca0&)pUe0 zNeo^3uqIHQQ(V+0=_D7WxWH(16QzwydfNn-HFUXLoAMwutHCtk5BcYi4beP?YcGn; zQX{*?JM<1j%9EFjh77U6WZx|%k)jkydMP6$Qsnty-5yE_d35edBav;yWfT73!mbAaqxbl>Hj@f&q)J&8qoWU8<@v7AS!jOJtUiKM(tm46iE4 zW+>x(-5WSXo&vo>R@c)qO}HH|FAf>!k44xne}zzZUB-aNm+{>iSWBsbC>m9-GR5Yr zRlS$~8?z~d{K@)-`vROKNg zKkML`P9O$8OpWE%~Z8_@8(*QI$4$DBt$V3ImBk!VoK!ZnZZcf@Sz7l) zb*Wm{utk;X8l>K-FAyikWwx&A(YR-AU9XVU_0<36@NzD4DZ2+D&ai3^>bk@k!wW^D zg@ICRUKnTrMZ%B_UpB3PN=-B-m_bxkC|Q`H63_)HFip74cj~Mc4f;YCl6t2SVKWka zcZYe`j8)$yF;QX7Wc1wz^R7;ppJIAscO~bYh7u~0%C@P5d61Ndmrsh@gIu&BqzZLT zk9-1FP%A-Tw!#zrSe>K`RwoIdF3IT;u>4)zrzxKDWNDp6sBT$=DrGed-=bgQkMSwCb`_wRA0hxVj8x!K1C@u z->0Z;s83N*ciyAQss@aubcymbc$LSRXRo`~Jjd!h6SC%+=WrrvfTlQTfTn~=&a&Vh ztRrzX^5&zzbL#{wCUK@*(n_ldY48Od6{jz%tQYI`g>C>#e>Wr1cXx2US)(#z)psrZ z-AqQ`Z7{={>0*&X$xu0|2r8Sfx%wh0QZJtrmnVr7DK06_=`;d@F%*DJ0ehj+0a-7W91jHjNnh@uU zfOm-6=<$=;cSsu_;ZvirAuQ5uH{W+lcleFJ!XZ(aNBOG}#!>OpNF}k@Ejr>)^+Q=)h^WayOoDf&4><7{Q zM*i_k1X#|2*IpD03mFgc7Vj8G5NWga1xk^6J!OPD5Zn&h7gRbV zLvlv3$J#{sC#%Iy`YITW=ETsC1WMM6vAl-$8971K7|M#OnnPh8EJGU&KTWGd6Y~fyNzjI@Ljb$)uS6XA;yl{7a9;&X7Qgoi-fFM<}~dKG=w*6U!a*mX6`|qIYK-h5+E^a!ZrPIj`zUD_*?ZQ zyVy&~%Tt5hVX(m@C5m0O9jxWLPOdoh{TiAryb_`mr2rQ8lEDq3W19d3lGdp7BlSWF zpkZH70{BN;e|M3cxmKSo*G_CX>v#5d<(;2`vP}+b1@H1rp@++J*e~lCHum9 zEkT5&ZbitK$-t)xq#gE!NK&RPeae@8q2(!?7V%9yxMGsb(iapbR8NaV*7RuH>t4kj zgr{t;kk+;OL%K!?+4~f6MxUZ+^Z-jKHs7aw+85M-aR}@S59>S=vgVoRa3X0AZ=ejL zWo5s|`U(7D`vR?SI$~d#Lqn=XoPF6BS{CO$dgTjorsaJT8js^VboPZu(8h9#AY>H{ z(m;tb#F;Xn#hJ3!yf`0f`@*9-lZ339WcekM^gpQL-k%i_t8&1NF7MNtt4MD z*i7At3fvZx3+dh7CYL>6Y5tWa7sHRuw*+B?#QxWjAu22XslM9hHlM7SI zfsDME;Z)S7$%XQ# zO)gL1LYABmf+_EKX^91uqcTk{x9ma07JJKHd09hQY1!T)yO`bHQtHdz zBFo3UdNoDtv7dudBvGP_P&<+5*6l4u2d9O26aKilRXSFCi)XClQ!aN;KMKfZZ;|z4 z+FMlB81@!bHEp)H7+Iv%sLmp-)}7rc*Q%mQ?RTr|Ne6A#-lEFbCVPwTs%^8q#V9~y zOIh?`Z&6wFX>ajt58w8dbT0oH)PbqGehipVl@H2tU6Y0DfY5Dt4W(JD3+<<9ztx2j ztFt9m<9S_I<$1lT64#hVZVg!v(Y54qHMOmrVDKM{)qv0sF~noyhrfW(#(+@F5H`z? zDWS`iLB^0uUj`W^p@u<5Nobo5GDZVOV>r?h%IR1obhY)aYFnD1iPsY*ML`p$Z;=b6 z8pE^^3}4M}_%O2LvEjqgrwxOQrwsWr$WSX%t59Q5d2n4rjbXX2Gek<=UqvEixxbpE z&~m*l8Q0vHcs~q{iFZze(x^$d286yr%}8bQs6@&HiHh-(nDst+mIKi}$}(d#voFhx zYG%VSqnf$RmKmd7$xfnk$mv*{nM^7kck#pwxtCqYhem4|i0H1Nc2hK3Dk#O~r6QDS z7*df8UtSNS^v;h{sj47u=B5o?WMO?QGfT>c^`b#vpzUQL*Hb$3F@PC~zFTMBHDlFx zOU=7xGWu?^c~__VAKLjLAUFMye87q$@EU=ja@+i4|Hn4?mU3iUNMMRs970^16Q=iWnn`$PH?J)q3CcucbS_^e8r8X)ndQk2 zq6LjCB=Q0hpiDGI=Q2GS_pF`EE2On^*;IBKbS#~V?i!toqS2j;Qf$6+1*6WXbM1gw z=q(^>V}W6?|+?4`Bl*@v>N^32md-L{%&7c6>7ueYeiMYsRYYmYR3XWc1x+^RAgL)+>|@E3tYM0!guZ zkrb&HNpX3SNRg^T&J~x?*b2rFXJ00omc@Aw63{i~%S2;{v*{7($=wwe(eMgcT~GBT z`*=OtUarFkafU78Oq?OkK20=IRP5`42&!<1b0Z3{vxcIDWRL-+37FIH%B0s_YbKvW zHe@CVSu@GcYc7suJ|l^>j(S6qilFe37g# z5T`QN7?NdrH1C!EANJk_&Z?^HAKwFm;h-{z7Uk`zqoN`X7j;C`1EL&klu<{-OAZ4J zFaa~;FeobO;HW@=k*QIc;-xYr!@LBhIVc4c7ODAKnNhFxVxW1e?Dz7@|NDKOz1P`$ zpM5)X4miF4cYiqS?>uYmwb%NtXFcn>*Ro4#&U0jKIRk}XTZyC%CTrN~+gL*e8*UBL z;D+jB!B=*~=5Cg(yhm&nGAx@b#4lYbS>mjL!8#eIYMx*3_LlZ|b6h&+Wi-!zh?uED z5=ovBWR^GqJ5MaB8JR2ejoXNUu*Ypk+g8aKq<@|SX)nn`t}Qo?4#D}3+eohTiW|2P zU)gaR#!o&o<)Zti@rS0I$d%PPZX=Jnmdemm#JEi-owMUMoAGDzaT{m+#`_fxO&h<$ zxeT#$t&(XMF)B&EP)2Q7KABC6aK|UueFwL12GZ{ZDMRN^yuaV~a&dtw-&8@Pv28Es zi*5cTeMAMA`mf9^t9Eut$|CzMSP#{krH}f(Rbm1MiCC{SqTKc#Ag=9*X6VjEeQ!FA z4Qniufq>r^9?w4!R6Bx^pcnwZW9vz~VJC@&uLLDo(})?WlwESoQyQXvN4Svz;9=e+ z$i7c@-rU)?rzRFjLrU>~-@(F4+o23spMmimQ&9uwYNX!|0h@(*{qK!dFTbk5KWkeb z`ww6g9(7oR`T~D4Sm8v+ewh@ky~3wf{1(Oz+}M$JJb>5KB3k(RLmvkzcxGn}9zna$ z4$;m~v$CIZNuIjD4F+TA}3L$$Q%k)xxlc~L|SBLUmlO+1$ntc|n z40>g1vhiShL_E8N2uD(Ylw`#5cF9}jJgX-Ym3BJzszT1N9u%)^%E%)d#h1V3mb+|C zqM9v>OqbcB$|-7c?_znIA+a&#Z5j&PBs7t-1@1k&z`ch8N0;|J1Xuzr z;Kq6jTvbki>&-0m7C6SSq+PPM+mtzGEBYYH#WqS8G}o|KI6lIJdO9ou1HcdW(tjoHer8XKu$wP#AVg&Tvv zw3U=ujHwjPSYHjqaz}#sDxYLxj%1!s(rbkT>3Oc#ngE$t zGjI64J`C_T09odLM^%7~6|djlya3sX0NI)VnG|zh{MLvjdDB)Uojb3L%a;9dVN=U5 zle*sb4w`PCzmD~lVfNSF>aYu{Aa#WAMcVlAM<^)bK?w|y1rioOVo(MIWz@WYjG7oA zs|t_}2#^IST##a}2~f-xxw4K1xWdT4#BO)Y?{t5}v|mWB8v<8L9GJuRj^`zRUER1;-WLinhz#o|j-~+=(3B&PM7C((5 zkwo!YZxqd|W1=`OG>Y>Aq6pvE{FYH{VH8{JC_*)}G`46I**efD5(P!kygD+9o;px? zoNH7{+;XCcHX>d}PjW|&w)1Zc*YIw&RnUnr8*Art z+tNwPA|UE37}j zT=5_VXpl{-ZJ)e*e3rX>itW`bSX#lm$L9c-Pw8ZL+F|nU@j1}tb0FWo(e}x^$7jmr zGew`9ZJ)f0&o_T5o6gAB6_RG9-_u*BBc9!2Kg+v5d#b%*jTp6F`lL4AqO;iDdXOS5 zMN&hdn>Ty4p4j$eRt4P8N582`R7d0Fe-qu}-sFBh`b`rf-bA;!H@TmWe$%{&H_~QUllyt>G@iyI*|xXc9_!eiV%MuTl*%;5WWbB%)Z3a%Wgo_fiD!HA z=r9mZlvLFM7=1Jhy+PUIFLwJsGOTPk{y>t)hwY$jIEBS$qDfcR<1?{{@tIeI_^{MYTJRwb`F83-mTAQ_Kgf2tHW2|%y7KySCx2%@qu(pb#N=mVP z1@n!a_2ds!O=Sv~ShD|p$NIFVIBe?j`=!(UF}`0q_{Dxds{VlS9Pp11o!$JWF}^F4 z1o`vt?p(rx__i*az*7^Dr90MQ(;~NNgJy8_NG5_#RV=G>Io_mGJUX+pd=Z|r-7~#y zh50bEq^+W6Z7rPMe*g+Sug z5X%r3Xi4i^48rKWcDJ0_38|;crB;yHi8Op*cR3O0C$5;FSlbDO){xL@SjpF;0n5A9 zc0y(u6Hf)NUZPLnxC>7x^k|-DJ4JgDM7-DvAZCkXh5fhO5hi+2_yS&H;~Ypq@9)r? z@O`BD(_RoQPFdDx*qeGHz5@^pW`vf>D{hxR*@@=^CU%R&Q4aC&G!pGsni)ayw+wqe zihrjb!lVQL#*pl46Q~p0UM!TH|Cy1&b96Vx0osF3BEI|)p_4i^XyH+1&I^PPXiUyA z84K2L!NXqj5wibY*vP2pFz1r0*{zmIB+St13=(9Sz8AfSO@x8coHFY0jKoNFyGd2m zYqek@15O!1BPC50UE6|KZ^aLpFRg?5Xz{ll2<@pwe-vdK`H!Z9@sZiKr)&MVJvf3Q zDeYNWRiKn<|4)+E2JDc_(2MDHohhO**Z=d1`J|wje{#3R8GKjA9_V7It_h0pr$99d z*6v|h^&`Jn2hx0yD#-4PJ2mA0;?E`w3TSuYA7*05+5@56u9~nNf6`7&6dU7Fp$wCd zvD!}L4i2=|oCj8`ZJ&gLy3#f{SYt=SXROa8wLT0FW|D(?Fj{G?&{_W(>jR_b3{hc| zXBZ#|vL-wQ|J~LC zG2geN+Dt9zsnXfg zQYI)s`wS#ask=K*K*fn8+m97bz94SwTFjwdYz=ca=C|| zCuo|V>{1%-#5kZdBzA9mIU8Se<4ayEa zwT6exvUymhctvj+6+-7-i;lWsCEnu902NJ1%jo}dJhG;W&*6Fgk@@EzGaJ^S8?-ai zH@(j23Enf&4okXXy}{vdc-MK5;W7_`xf>K>od+3?lTNs}0P`Tjbsofyo--Aab;wST z*kuB?t!l}*%EcKJHfhVq-@_MYv(}+t>+1AKPBqBf-q< z#DGPozJlvb)tfyogH?d?_l9(Dgf044IfQ6HF{H*ECmSVed2Ug=}6P8!hWdclJ3gPx-C6ju@RMqx6A-vYzDYvgZZpEUQX7)*>J)?!Z@)FqUMGg zKg4HX5Hl!3tVOu4zU@69*zZSYA=!uacz`V^A}hC1PB;>AD0qt4m}v+9fqm%Yzb@O1?ykMGuc5xvBdhHX+P9N zw>hZ@5-XZC#}pqpO3WC>?sSxAHw?NYjcu;R4NaXAZut6RL;+Em+C%R(T$)P%X}o8zr)bQxEr4vREjxv7I`DS84bAD>@enWh zIF^4PaVn*mLS=;$b|}7XL}0|G+%B##VI`<}mdYRe*od}mN$K)Yi%S>jf)5I4D>85H z$(fY^0+`4FNaS2_#YCb#!g~!q#WIQ9BPWp$($&ekURC57qZBIDMl%xmI6U!^MDhG` z3{SlDvups#6iTz2$G@%{85l9-30;{dsM(jwAIt&11v#*sIgr_g7PX2*_W}b#3R6g7 ztF3nI+fnVPe)P|>)iX!!w$jz4P>MIyPNgP=AHWkYNg@A`6cX5KN7#4SHvAtLGbE8d zn8Xy+Zuwe7(NQ}(WYvx@?)zkE?@^0Nr2*(SJejbdsC9NwM(es97?sWrEUR?x(BAyO z);S?6T<1oXAVc;>Awx#YK+<@hB<2knQi}{J&&d#-;InObuX(l|P^rm~{YW4#$q@b_ z8A5;zsf8UN?7K`h`wp^DV39sDGhZyv^xO}Phv(M9m`Rq9VaJVX$TwH_d~V#5&7-7k zc+SjDj2M)c_I`hK-+rYik-0U1I|yI!=orKXU()s95uMoJdvrZ`7{}P)d%A*u^Kx5F zB>SKy6W`p+RtB&t%8(-Mwlbu0lwlw<$&}6&{0pU1rA8TsGb~)94E#fsfxuP16RgtS??q~Z6NEo}Q3uB{ zB>a*B!WVsr3BN}H;fq4Vgx}K@{+pNB3L#lYh2Y>1reF@_eWKO2-x%cCRF0LU*`n7D z)0;K_U=1g;Djx<;czf5Lu?J-O6O*FHPd!6X1&yEbiw49S%}LcvMi_qtMYvI zd{;v0Xmq6wR#1F(^;B159K8Qq$M#UVYmoCh*RDqS$%+0j7V+hFnq=k3BK*PP&`u#b zOBj$a&2egtcJC&_70%Qm2&;&yv>OYA9zB~vKv>LY<7MmdEj*945cQs29nAKbnuCqGW-myRpI?IO|Ok3DagzA@NQBlrBs*#4_0 zeNHAFiphhbc3=}^RTuNewb+U+Se@Sa_be}-q&Qje?^a$`qgV02xx9GN=Va2qQF*a2 z$nbBGKV7s3+$rhbB7I%7*PitK8|q&>YR#Pd8I3NHR;V)7j7H(dR;3<}_&surWtCc$ z2AyosY@ib`7FlZD2=uV{TL|<4wvsKiZUx$ay?0A3PFx=?{x$;X6FhQJpWr5r|CA^G zXko?I1}hHK{J6S3i=XIkG&c4w}Jk7FwrU?4i%JI9|HaMSfW$VdHkNBGl2f5 zpN0K0&j$KP&@`ao5?+fzw*ZY1*KscbHg%ANw4oeFDq zvY?+E^b*j|goC$$Mu=+<>=LH3aX>0N&&Xy1X(;VRwgKoAdG?n^_NMXok&*GZWxNdO z9Sx-Ey$ML;_cI_3`42$)-a!~VS2PMpU6%mq+g2Lc8$g33wJ-o0=h`h1+?00;oC4;j~|f%@Pi`%-HiklKTnfuMdv@kiP9QpihYGTR>{{{vVK9i;_=TRzGn)1xRx>W6d7#TBSN{UEQe+NKm!DI0_`tok0YHDe+iJ5_``)fx1AAXEX!kN*VH+}{bL z4DEHCgFbE0kp_(cQeGw-)Nat-20a3#CH{FJEdj3rX$g1>NJ~JE!A=R738W={1(25b zKLTlq-{*Lz#Log!p076O4j@hCV+M_@bo@;RQr8!NP?aI&F9B)F{|2Nf-(k?6Lmb&B z4H^!lDL>z!7K3gz=zbtg?;0RY?+ZYh-ai3pi9cni6Tgf>Q-L(5HyX6(Fvs6fKU|+WR4+J_;PzvZEK@~uU2pR~K5;O?tFhP|-2MZbwbf};!fwZOYGa$7a zzXGZd*FIGaYXb}#45TfEu?F2~T)$^zN1yEE+ldC952S5@7K8q2T>Fo3T%QEemcrXW zYByR>aqPy=fwTm?YS0Hj8uGp)9W)(C{dE}G$)`GY<6~f6p59J0K13Uj|)u z8mzMD!F52Y8(#%dz513xj~Ucy(Ca|T+75$0bGjp|GAIM2cH?tET8>(Qv>Yu2(sFbc zkd~v~X~%9<0og4DAhjEh0%=R3?(01cmHrjD*0ovc9o?Z#0DZdR! zQ+|&@s|;Fe(0>4F%KvUq|1%uf5QEMF()3;mr0Hz|()8X8r0IPfNONnOL7y1o#PkS* zRspHMpBdTMGab7z9Z2oQLLjvp-v&~<@dqGnDO8>1r1DII>VY&x*BSIS&?kkV4}g@R zK4YP4BI^gFvXg++Zd?wec4Ik^+Kq1lsonS$khU`322#7xFXPya!-3Rpi~~};@d(gW zhcJ&G15&&3Jdn0BHUk|YW%^~HBL%$*bd;difQ}Zl1?U(-ZvYJvv=wNepzT1%3K}%d zu^X2Htw$YTg60AJK+sa4p9)$D z^gBV118oHg0291K+w%VcMJL| z&_Y4q1-e4eI-q7jzXrNM(3?P`1^o}u5JCMefc+D61W;c=Cj)&Xyqp8{mY{l|*96T4 z`kA1GKx+hj73f=n9tOHy&@(_fUNWH8vc4^{aX{Y@^i6|$TxeMjiR>7lI|N+{^c6u< zfc~)$xq8mXQWGp|g}7#bZW1&N=w?CB1942O)Y=BLR?waofqV4_^t7PmKtC6>8t4T< zhfcJtUkLgv(C-D!1bSW2Ye0Vxw8zC5rxA1{kR`0026U;&CIFR)tR3iWkv#zPH$ml> zIQ~W$G}WM64O(N+pA0I!)Oq$`pn($J$v_=nL3NZ#cvk@p7umf)X9!vcG)B-*jlVwvohh_@=<6c8yx#Z&x>x-HsWtlt&{~mwaWcNo z6FvPqklM+eKx&oyPH`;j=|Fpmzw3Z>zT!Eca*-V{)v1Y30Md6{3Z%7e3y{Y7%Rn5v zEw!Eo`l_Vp7eKvJl)VI`wsS>;WnCj7KLs>j&__TE<%#pBS=M-wH36L`==(tG+H*Q= zoybx^wSuMssq0#x$s&6Vs6qYBa9pnjQrEkHri$wp<9c$V<9Zp;G;v)Cq#^GB`n<@F z{k$^|Q3W(hWH$h*zt@1Ki>%K~$KL>;Mv>J4slTUzW{Yf_@%JH6v&c@L<@oz5P>aZ( z2AU(tn(eq=45Y5}fm+42)3|=R$#ESC)F!U&KpKM=fbJF98$kC9N;PAgT5@41&~}_X(v^0 z+eP*Y(A$DOGtY6I4)mtT76EM&w8^**x*FD2Wak6DC+JQf4f)7xEbEIRdjM#N#P4T7 z{r4u5i?4NL-vg=;*}>O2vN1p^v#xh!M*^K7{=RgBBl`i+St7f8fg@WFbdks&>_96> zV(=``!@|pYAe)z)EbDP`tpIvb(B(kSNK9LRR?8D}f%J)IfHcov26|1ND8JdVeko5J z2K1CXaTJg~F(0V6XwDNrWrF?%^sqcJ_7=x=22dYyT?M4Bdo9GQhse$Y+DFhGKiQbcF(Ny3DS9!28i3UGX`n+zR#_ ztK)hZP>IMM02(4_t8tZuqw=-Ug%@R({B=n$3s=XMj}{B4``q&$53&i^Uo*>=&FJAw z{C8m6t}tH@Ch|3)XOgf6md5*9at_vvt<%plv3M{nV(P7GE0Y@QZDKNS^OAU5ux^5G~#YoYz_WzCgkbs)vcuA1i310NSFO*%7=zdUCT_O7!gGK`Bs=LWRy4r7%kv#&W zBeK6XXa|sv*B*{$mX6_`4YWpjYi&R})_XV5Ya-hSq+`PG0qHpLfoM+Y*zs9FI-bn6 ztvbg1H6R^#UJs;W(QgCk_%u5aI%Yi@NXM~f0qNNGoj?!l&E8rkkdA@>6-dX$`=NQH zDPogK(@_Vc>9_?*)3F*z)A3s%O-CvENtzCxd8p}_2&Cz_5lGX)HL#kFSAaAfT)nU9 zI0i`5Q46H$xE@H;@gR_<<3%7%#||J($C00K(oqdmwhvR;40Nra+kk2WJppuqpjUyW z2>Ne>4({#9Mgh$f*Qr1=1T6$=67&$z6@p$c=pBRl?`c{0iR+0#e-?C^K{o(hDYE;3 zt{3!Uptl5V1^TO?K4ln{5i}U+2|?!p=}2`O(4NwZ{fa?P0qrfa-y6iGm-~tAaD&bQ z`i#gL4O$9xtjN9xbeNzQ4f;D!50M3b!mwa_3-p&CU1EURy_Z(Ih_Txh?pxs`UofWD zLUHuFYv-&=(}OWi@4=!fXN&S(VzNkQ;v<~_8~CtM5>Tz)1CxLc)VZ%+ zH9s~`>h(iH6L$%x8lFmf=cKU4@r46axbIjH*ZP?{QwVqLvk;L&`-^tjXD=j$ZZCXY zPMYWen+HT>%M4GXvB^$=f@C8NckD@!EYkDhBRx-|hyTI({E%#MrEz{(wrDcv2W1QL z5!&b^vPWjIZdx0dPW{MVh!hRhXC<}RB|U%`dsl$IIIed&p4f)H;9Xj8UW!zTV%Z|=(NUuAD?CVuMEyfdv^-vWG8%vq~GU@;pe24 zel!rt$y)+*awFd1Ny%miVp5`B>@8jrrR3E_DWNZkvjQ;int3iTb+#_km&wVF&T{9Y zYm+Vsl)i#J?zp$7~?fqi{ikV}794~tAQbcYVo1sSmgyg2rS72_^j|LKvn;-g9 zV%fEJPPxpcM7`)~gUM3T8-d2BguW!s3Xq$7ndfqH)5QRNMdhXvL0`eSSq>K`H^s^h zkN^X6Gi#gFi=HkR!GX(qq!4Hb2R>hcxv2(*fkfoyKz~Xq<5QwuZjzl&lBJ|7QA+4b za#I0v6Pp9s4CLgdivjwI%1tGLzU-g5#`p(~Iet7Hc>(GG}r4QOIENh*vE$Vt{DJ0RY3 z0#adgKu*$T*a7jL6OalK(1P_XaIbrQBy7&<(g(iGpoIoKWYEtIde@+S2tl8v1}LgC z=vITi4|JNm<0T_|-=KrhYu0B+88q3TMFw&DPW`=P&_4`10{v%o<#(m}w$B^ca)Z_x z^j`+`K{rUB9d6Ji1}!n@QG?zzh`U(p+lB*aD3=(-2~3qeY7oCQRoO=dRiOW@vI`Bm z)}Y4>dL2mL#;;EGiGc=PY|sq`-EYt)gWfaf@ZL@+;|yA0&?+E(+h!yChe1c7hpaI; z$Dk_=`kFzV2EA+0r_e9fXU7|K4UoR=UW5K((6Q+Gs%x7;<1^v`bx)F%~uSSNNT8 zjpcxnxiauI41e*>?|jmTC%26nHG1@j5mV}CO{tsK+C00it+lbfY5J^&y4m%u(;J&c zPHvmfFr}@zb=Yavf!4m|EIGMXDqVtaL;Ce=hwGn@#ww(ewi%6ctiBK}f@oPeMH7aI zV0l(BR0J!sf?@bpqF=w25Tx;v@g*7utA{n7iFpsdMff=v(^QEch9#`|wy?IuYG*nx z#QkRoX9Di^(DsXPKNdQ7G4B6@CS8L22IS|ZxZeS$KZpBoalah*L%=P{a{E-=VSU>9 zHE%uc|G<4R?&NR^?t}22J1`>AN7nulmB|2u%C_6CWoTy05rF9SmDll$ZpoxC<9?Yh zlQ1sEktq38b?*KEdLff$HBN78m^y0KtmY~8$c&MVO>KjQoOs%Z5#erL}=oP%B%L9YO{ zpW8G?3P~zA*@49*!hb@VjykF9nsXEwRLvnOv)D6L*~>NxA?aZ_w?&Y2Tcqa9nbF+Z zmOym^{3Rsi9-r>yV^2P5NFh?qQ5iKyWr4=@+i-4)Amwk7nge5+fRY?v2?@FNgsy8z zFGC1Xne{Z%sj^NRg=ootzZ}f*JKK4f$~u@JK?cT73PRt)Azh<= z1u~!7@h(Faks5rJ(cr5rkgO-*e0_wrJs4R#%HYBjQk9@IhIvj%PpNNYDnEPmO;a3+ zv^c7a#ZhH}1jX5_Pe;~>qigHVyKvOGwc{>1b4=an37NWc$B#KPbcia{cS4F@@zs6# zXwYe<<|9&qR7QeS7D&)H;oKCVL3c-L(B!sEJ=zLwt>|8d^5XZDkdC(tYD2XejUm#} z29VHNkKEj=Nq%b9ZJGQ5{%3yyfx;PLB)FQ8#fi z9T~=|Iws`x&*&!>k5_I=t-KQH)TPQ+BgHB!hOTnvPkH^9AcxnWHbWY3c69X*F}muV z3zw6WT!no!pYsxi|HVaj@9w}B?F}Ut!xGwW>9n>jvbN!td zJ@<@zgfZ>)l#u6}hI_3^VLWqNJLQ>3?TN}d!L!PW!82z`Rj0Rl?Dntm7XM(Ko9Fvu zcuq7s9L9gLhZE+@vqiNv+=5W^g-8eQRQ3)SQ&}E#+nbOdh#J?JlvfRPbSTWfC={4 zYzTTLVJ=krCf5sTcaAc7K%`|sWh@ISD@Go09$NF@i+S0jrLlQnrlGYtnjLQs&w}tr z66OF8197+f3#+TSk*(SzBFzJpF%MK$j6C4YhFAi$jOVK#l>m7 z+3Abj7Hf}!*B^xEL5Tl^mT2wZ;&IQ-vz2=y?FXyuWiX(!Vw3~U@hkVs1UcM4fw%al zT;1INB$oStRSn_92YF7&`bj5vSuf1~e+euo??gJosItvqL}kU`ol66h_y6$d{7ZPt zT@m)@8?n4+8~9;ME5frO!Ltc-Ww@_(T1cJ1P2)9Bi1dRUm2C%GDl0~wa0PBZ^rrz6nM&4~Vo~q%yXPR91{U;35ajgNHo!=rO!y zenh$8v3>RxI8PF^t|N^6K)(rDpMjMY?$&4_djE*AMMP!RMkG*Wn`~5^`j_h_l=HNw zEfiM=TprUF3S21?MtZR4gsd;bG?bh5!s>uCOuL6j>j0Ip4p3P!biLK+`c)oXzaMXz z6`|{Yi_vxWN|Z3VJ$@3h{7>Y!o8>}u`&y&hL}eCdTUGY7jf$h&T=Aj0eTN{&rpJvv z4~fz3$!)H+E#V})Jtbs$1e&*QmJ8G6uOiiIw~2J@S!JEzS!Ko0WiBF7o?r0r95-h; zB9`ZDn`ByZIME(o37I}J1Meg2iai^BByS;H@puG3H%Er-gA!7rD-D8F?cn;gfl93_mH;0kPisJ+Dk zpJ;yRAtAqK_*xo;@jJ!XVx#N| zgGYR;9VSwKRYrbQX86T&q8)3|%yzFcN@q4;Kf{l9?%c@*M`>rl(Q^H(qZ4bBbP1A? z^aJ2R7)>-{LsV!$w$bQG&cd2KBMl+o;Uq_CX^>w$w&;E7&c;U;WP-5o zICO`nU#bxzDzn~!?5ARcKCn@lwHl`9P%$`<+o;UquHmPOtj$K<$Ozpg1-^S3A&!0q z8KI!HC2k{hRRSXv`purSb3;r~_(KT|()ED`X&sfSP=gd6w+OQo{!mwqQ&3v+HcsKu zDm*QD7^-fcmOPBs{l;h!m04^r{Y;FO1p`Hdad4o+#6WGbQJHl+Ox0;3TVbPaWVG}w zgzjauI3%S;i-RZG?p@HpsM~0Lu|IM|FMm^rUwV1B(Frh80iF^XrMD09cHp#@z87)1 zu8T$~ATGHDH^5U@jZRQplNz0XXyhN)JdDc69@jjK#&4m)+R`D?#fv`|qp=0rL4>Xq zOvT}1AeP#w%o+|;ak|KO^cGP!G8!*RvFu((gX?kCXmCU@YczsZt+|cH72z!%e)H%x z8o3LZz0I7sClZ>I1t)sV3CB^m;^-?~G$wJ;$}O#NPvmcA!qSk`$i&5{z%(Q>KixbH ziOdqaUoEC3LsVw5)3r&A5=VoGFzX3ZR3QfFX&aSU^I?k8B5Su%H!?~;69dq_j1m{+ zcEu=N8)uZlmnMgmgYYL38l{Ji+Z9GBJX-lDy1$&Qls>O zF-k;gl#Vb)iAasoC}Wg}x{*=3y&D>(?ChDhr4+OUo4ciSbz-CBU#uTnl>HARG)c>S zCP}+pYf*>YQBX_C6b661@=i$pCMi4(`L&dGQ5q7Nq;8&uL?%fGs-HDRiAasoFN{$l zQloUFF-k;gltvq)MAVIpQg@s!<7WdwEhQG_sM)gSIHMHu-9%VP4)LDQApLisK`Lan zOuIcHvC11^3A#R#$EMx?W4M~T7VY#EWx zmYpFo&Xy5%BO|0o?{=^58dtCf8KFl(^EJK|jP91vANPd^z5D~uEWd$^_JhlApx1=P z=fwTJ9WU8r zK;l1S2vgDW#piLjkKYgf={0uTIRU$t){Q#<{81N=7!li!vSCYq(;Qkz2C~*ZU9isN+dov6&xpMuil ze#_DBdVukqgagE=5M+SYu|2Hz^Km~8_d47M<31Dj<8i+Z_e$Jfz1;eT#jL4TwSO2?Te%LQV{)@9N^d7Hlv|c7X?!d2IA*je19b(fZ79Z(W^hs z!^0eywV!=1-Y`Qk5tdZIO=T-=S)?Qo0%u1|E%j9hT9H$lsp)?D z#zKbAqO4K)?Hfs73O;f#hrUWUx#$Z#J&*4qRZt;wdfqlmceWgAC?YDe+TllKH`$03 zIZDKep)zJEe|3efy|q{Edn$%>rq`vR#~N{zBm`-N88CXFrK^~>S?uKg8M4msY&0({aV}~ z!JRgbh4a$HEp>mQf)bj)MGK1uGD%kK^9uymg%$gG$0Jc&nw)(HTA(dbBK`^CKUzK8gfn}X1$SHeIK~n20d*6m^2!8kCcZb{J`Bj03*9560rjLQ zWss-E)*w1<_>C`VVfcEU6f2uFe$K_Xvs|*NI@}h%f;LAT@T<7D;QkxjSr&hb`(3#I z4tJJ|h4@YBa`}uRqif|fC_c%{Y2x@KF0a=>bF{n?>Ao;3dl}5BtO~mNlKA66*F?Hz z@|bcy%Qcfk1(w&%cwKmTosE~q_X*h^FdJv{j}7Tb2v!Q3tEF(Z1m={M#qi)iD)|h^ z*giNFzw-i0%XxF_o7(Jyi(G}pEtay9!t=S8yY=wwv8JrJ4pXaiJ;b=I>Eqog`)yRB zc#uo*+gXD_)7xo%$4f5pX(IIfjqCv?YnR=9Aq-Hnd7D8WC+Uwg8c~Qk=^NnV@@sw43-{gSe^c@~<6e9fviJ)sHB->~YSX;7TV zJ5@Y|pXM8;K{kZdxmc_k{dSPWJ6ppCRS^s@M4bBG9A+yfnpi1)Ep*(l7s zY8j1e4xzBEo8-5x^Q1(aj#ylTHXvd?-f~VE{yJ_>C`_+c-7ba3AOjfN|*k z32$%o0%$76*3l4B(^!vksyRVaX03pm%Gg{`nY$@S64(_&`%p&JVrV!7f%L)eApD;8 z(}4K|hX%leH2fr&h66;@f*?#!(@g{8;HLrOJMCofdYgu+h6W;~L1m;tWo{Zewu6No zYiZwH)kKQ+7ynhm;x6vJp|s-1-#BmqY7Tm{ww1xLbY~|T*QJ>${15)%dC$H-DlNIW zv+d{{;gY>7hHYH3ZgFYFlG2LC&M%i(CBWO($XnpJI3rn*f|k3oVI$s^_Gu&S_2Kw^ z6~D***`S|`J2|0$NoG*%axX_GQ*e4Hn;C4jlJ$B#HNK>&es+UJ5uc|89bYm7+HUP{ z^%N1spTm!BcwGCyCrMI;ZbUxrA$j>8WE1JZzL*YXWpCW8Z5h(lUI~n`nRW&TL*G6L zcl3CrOF9_$h4}k;+-VEpxBYh9hu}U4_sdPz6O~y{7};7I=}LF?x5dcp1_Ls+d_%f| zBRjS zcdtapfzhU!;8g`e*t$E}CgzJUg=!jz%5aXcWvPtxsm!#RpvbucRncFrY#WaD3DS_Uh{b2Ybt&sIdrHIM?q*2N^=Zuv$fz}w@jD`r zJ7;qv4{?q#p%x8A9=ci6?PA=B7^PxpFhe(NN(@BPBA`An;O=T-> z0dLCa{S@Qi?=ND+vi(xX*&3LJ z`}MffTHk=5fAo^^FUK#1pX)-C*&ku5k6)I5x&p-giq-8BG_hG|Bh`JjA*e?kqLDV0zkVvJSx=jd1Ew z`{!|oX=}d*_rq|f?yXSG|H25+|{9_q6LdLpfK7RB1<3GJZ4rP&?LQ7>T&N=1Do@S6ELMfe=N*W=* ze2`H}*WlPd`=z`wK5L+TJ#c3!=LPrnt8ho6rH;ALWHgaxw91&#Dl_>MSifrp?JC%) zt-ZC1U47GbvI$hmHm0w>2x{Q5oRH2@_V6{e1(B4_hHNF^h|oDinHhx0_pxrbQKBkAN=(2+Wruf5E!G?zqPMisUlU{(Hq;g6t~w!&VHKZ5 z$EnbCvaOqN{S3|aa;t2U+n%!+>uCW zh# zK0SC2GFDno<2O3kLQZSONB4eJfGA-Fw#}yv+VGr+_c<5iKz-H_xIVl@(kq0u)Hc$2HP%V10&M zFc;(a4t^}XEUCQEotE)>bSc`|QiY%Pb8tsJ+}?=$BHVAl9V45PTWqUpX(rMQzg0%P zRGG_iW=XpO&VJJNhK!McMp-?IO9ZQ5ou zI{itDnvufKx%f_!Qi9)pwy>&H$>126l0l?osElN&EY5x#GGw%kJj_K{SsreKM65ok)dj%iJi(XI~$U|MA%<@$HN!OAzDA5;O>R z?!BqJ5ot?DWvgu0Je0`rc06okmN(WRbrHM`rb*H(kQ?WS>|o{!J0rUg?gk;1${mp& zk*%`TNR7(!*SQju{VaD6BBU!KxZ4t=bMn#5F{!#bObnhl99v`slj!r7P!oOUU>CyW zM@A2cbjh{KI>CU-^5=56hs&oBQbz=rkGk6{qh>WuZ)%vD?5OKtQj2}obs_u?0TZgL zM7oqqWiNvjmF3Ux;U0b;LP&EW`29_`qd4k7Y`~)F= zF@oo3VtKavej&$8hcO-XR6?$E&X+EP>kEuMA<}g#D%%2vRF*&2XL`7%m0uRY^$(JA z9dsOYSjA^L=Rpr8WZHLzbRj&CHarulPOFSMt+M=iUXhpWSQg8(*)}KOnCLK#4u2*g z%cBo4!y?+lFNEjYjqM;(o>fMkRhB=`w|IE&L`aJx^!b&Twp-*eE3q`o+_bA6O~~?> z26%JS#-4<6lRE`1|{+q+}A&9<2%j%E&{I>EyUnfIN|TnO*48J#B5 z4NX+G9c-yAf8HPR@E+G!c`ddcj5?SKS8$^1sU`4BhDt*#k4Vk zPeu-FSOoh{$ZXCz%7t({#pvQ6il=RT*1TD$Ae8Z+PZ|;>I^ zkByAu@U28P5+6dwa7Z5sIm|h`xDXDf8v9739IA{Qsw{sF56Mdp2gd55Jt7;yq2nVV zhwJdIm3s-Etj(xIik)jPK+-h_2O2#jQVvx{4pnA2j9Wyk-&aiXul?;z=SZ*w#=V@_ z`AgRc567EXyXj{=9PcTWZ!Yz0(rIv2R0_nEt3l(xEs!6D-{M59Pg_I4m8^k8=D{__?kw9ZcMX zO!1^6$@1fWhjb*_gLDwcUTAD3k*=8jjkMEuz?Dc3CLW9o(u0YK^kCw%M8<=OiHf<3 zS}aT8Vr$RlQ3DV~E%ID!oizh$8a`h0#380=^Axnyr3LA5%+r+#%u~>CTU22V@}JNs z<(x^(V!*EKZH1bpph)GL2u~qSbWFNb5kc|K+Z+`={z;6GR&m`k{z;6Fe#3XSF+W7Q z$@*`_{Coh-BGOIPj~7$JP1cEYll8G8<0k7w-N^iC(f@eO4@Ur_%}>xugcg_inU}!) z#Ehecv?#)#N@$95P9vr%;;8W5g_@%9s6`p1@Ta0AC5sQO-HUG)MR0cYPPlQ9x7zifn+dE}EO5xF$6> z0kP;pT$7uVk3X)-&BgD`APSK#a(hk8#TIA>ksd=lL`=g{m~zDMw^RH5bR$o)dHE*xoQn>-C)=<<^bXx+Y$FjLPO#^ftY55Gde4} zXhz~<6;Mv&9?9Flgry;=d5Mcqp=n5Bc)EKUk{Be8^;}_EFGPB*-tWa6eF#?~Jyvh1 zm>wQLOr*!^oh`C2 z;t=|s1+|V$G4Mw#|AgdijC2S$C=L0wj&@ZVk{F}zo`xjGNQa_3jX5GxbMyyej)>G8 z4Hwfxb3~-(s9Iz+M?~Go9DRH^$|Zc$bN#j0tD3iivM89 zxD^w(VXDb4hmAT#7=cXRB_jAU*U&>=!3~zM2OX%Jkd~ZtbGbe^ zg`aaVo|E?Q?mGsJmHo4L_Lve#r0ddE)`_Q77N` za+6x^p0_-sx#`M=d6-gbXl<&WC0$an#R2k!#CX`4c_ye?l%wG6|37 zUe0>s7C5=iT;=&TDTvze8(-4sIR>W=vT69?a?a5C6x75V{kVsxJDA;9 zVWK0&ooQlO?Tvf2Eq@fpv7QM0ecaE%{W0A6t|xHEet6cCxc?aUAK<Rh9oZUg!l|93ZTdQXayFYTCcqD15u*g0H9n&I9 zr2F2fY_;uLX8pqWqvokUs`%eNs!rBF?N9)#F3pi;bgW@oNsqd-vHYZWH5{C#=VFju|C)7a8t|TrI;S z<-@xfzqdFHw*%M1!u6yhT<|cb3 z${LZH1eMVws4Pi|cJK4v!Na*&PW2ceN11Pe#NXsP0Wy~AKRbbW4|zA zdG;Lw#nMcBqsb=9vo!l_yA&0&)!%9&DTGn!rT?%xZ$eMw49qBbdeb7tD_OEY&p~cMr&X zOCkDa{z_;VmKAIH)V&Gmf*}ceH?kn4S()VBNg9%B#Qu)lRJ|lBlOuan#++5zT{h}ttu(R^ zfc`8x{h^I8T8+kH6>_7G)n=na22e_SPO~wMW+SziZB}-}*uZ4RQ`K)YkZ);oNbT<( zA)y+uOPf_-s`ME?1s)6;jRc!tlidpJIp+%Y!S#1S)8IPEOO=+!;c}A+L@whHk|y7H zh4h27C+le==SYORKnn5*ATCkOrujxlKI=>K7|59B)9_p7PP2P^0y#GV>GsJIrakB2 z2!Fl7IPlyEXph-n9{okBH-2w8BGU68R7UkwnJ7`V79Eg1R)8rU>Pzvyknu(7jJ2o|DFZ4a11gKIIsIp!O1*hB9v&igz7&Y| zXg+@a!%l}mM)lyx(Lnc%?daxtcJDTaxD@>6ULlJcxqt z)|zW=a`rUj5UH(E8EuWqilQ|O5S+jIb(1sBOU~?;=DAH%i*0Zahaj6X(PwkU+T?6E zP0%gmkS z%+~E%V?42!mz+ava;`JlL!|abWwbXcD+)Pr#`ri7IakkWY?|88x|@vg@}6FDoCe@@ zLk^LWqcW1CvZ9c4BZBiEy6Cn!$A^+Lv6!VQ(C+xjS!!#}=M6bTN{-4%j>>imIYUCp zxn#GKbH7c_Y(ox_lA|(`qq3rqgG2Fhy4!BendByCY(rB+YvYs?$23pdHD)=u=34Em zxf)8e=K8cT%tSg|tFi}>DwP$5q%R`4^CD`lnIR-y(9(+Yt9K1mK~;RpN7PBSHXUP# zBGPlLRrVlKrm~_C6<32@qwdZJnWx-PcSHxIOxo0e=rLEO9kdtx+#rW_LXm{!lv{QepF*HP~ z8Y-h|sH`ZeaT9_&%SV*k(0tad8t2TN)z;`5zzkq3h46B(t_|R1d_B#>ZF1f*gn3&~0Vw_grT14RV^vZyIePQX8Z)+8~t`g{U|iG}S}YtVZ-8c8MYd)!msry#^XOBHi;tjTRB9 z4N@6xkjjce&J768Uz52F^f4ZCS~zh~^zKyO3)~Ku~^sMgl{t9NlN=5PCqw>9WqLlTi1XqC}GtE?y_#Wjm-JS2IK`zRte zf!*_0eYIDMO-_liJ4C8MDx(IeEWBBau`|pKdewr>P^Vd3!awvf=hg+J)bZoJ7pY17 z4nlP|i7&EKJ`4s&=Q4>@EmTIeP+7EE1bzB36k%m&xvxS`cP#wX1SI*p=o0lo>u4TxiWwH4Po3NZ>_#o1$Zk2KB zQe}nmaXmuH_-u-skF9Q-Vzws8nX4>>k{k=l_lM0>mKjcnw1J{BHc(VnC@1p~lD}8& z=HzU5**T**c#5(BMuKcf*wo}(h7Tgu5tUI#R8}Y-ab>2>Q)Yr^B@3V>x{HqVYndDdPZfeXH-@w z7n~%ij<6q}^K%hC|5yMkxm{!CN7&rsex?;hr1gx-SkI`eP+sEf>d8J{LZ%&y&Pmvm zYh}5pCjCNIJg>n+7E1&h*k=&0b&2((hdErNs?sn_(cDwa-!wZq>ipr=fDl3$i zxcX+WM^{2-VGCd+$fo!w7@a=w48sSJ+EAW7$#JuI6NDC@1du)?LrZ{Wd2}h7%&?L}lbeWrcFWF(m&m$zaHw zdbr-rN!&DR0n`NPO4#)3XH4Bgr1nH*v?nSnloyT@)JBw_Ss}bc%&Zo`PHQ>-UUua}qLvSZqGRCJ&!5d=P29tTNWi zDl3$aID0$6%}3n4VFAPh=}Fjp;hv`K5UIUY8SSmg3gw0Kss2qt21Dl5Lm4+OiKYq* zAP4Ua;wNmH@UKR1h}7PyjP_P#h4K?;TN*t4gwGHb!b%V)VY7pW8J!_g+oCes7L^ss z3BN+~FD`WJ%w_JrQ1GISLg)z8k+4a@3yh8ssclgiZHvkZQN}? z4VyPCI}3Yi%onEIiit@(9h3j|@xS}pD-uVGsJRV`M08Ce%VoxX8E=dS7x!TDnctGi zg*I$E<2E1nA-H2~r5$s!{8Yc4<1Dbd?TmLj{td$Y9L%WN+ZF(+j;d^>?aH}HP#&kK zvTGN<#m+3*ycJI(pJZE>>WZqq<)bQ*O=&pEhs@l|fl=dYvXi+%L|*`37~IChCO%nq z6J6U{-!z9GKvjhRT+sThB!IfsjDviT+AH2lXnke>kGS(aHlio zT^oMmOPXZwGG+rWZWzH0Bqr*gz6~VOwv;!Z;>E5lC^^|}aUcr3;m%x#(@ZG=?eTJdLW{#1}w6w^Ws z69r(ilc-GEO)7iR$ey!NAB!xizt@axi;;CRr8qQJDSm{g`?nf&TZr$)D8-x^&8=;z zf=tA_g_?+BD#Kw$8Hmc*zOYorR)Wf&GBUEKGFk}rM+>2{Zl(<7vC8l?qVC^()vXMx zVw3?rhQd_grr`zIg<>i~KcfglWzvUN*($K4vNbm9BWH-JY_pM3B~;eU6yfdIb_1h6 zJEE%iR*WKGPqv_u&oT9F^@SOBs&B=tr;8I6{Z#k6=pYdb}o%HIaeW#%omJe5S7WX zRVrh}p)$52R7NIMw#CTaFtX%|!HUY)pTtI^mDD!N9&}1D<`C24C|ohVx_cGl(A}XJ zNyj2K8O0z{#ZVa)LuFJ9l~FNNw#CS(7%EGy7{wWjh*6B%*tW$cM7<%xVmuqG7!w+% zU_;1ZW18nqp4CuzRq~Ue-KMQ^p=oOn;S5A@r7~%eiHzeBDkGEXZ;O#pF;v#g6yuCo z#rQd*J~cuy)+SYqvp8B+xL#BbD@ZSjI$klxC!RwXK9 zRiZL7sj@9bM#WHBa>dv!ZH&SdXRd?lHcqH4|>H}4B7CZFoW@>K?NF&qFRibjbad$ zSxW?a+GWIi7*3Fb-ZLHN`18P!)a@-iJ9PVZ2 zg(=0_!QDqGerPNPQ5n}(SSn*PRAtW_8Cg^r=S9@t79&fp6uYI3QMgjv9^1w!o>Dxs z8pf1D;$8C64N-Ao~V4-JoQ zSGac1!!BaK%_2Z#jyo7%%S*#Yo!5;5I`#xJ9Ijp)x9l%BUDB zqhhFRi;+<=RF+&Zc1s&$b!;1hM)9(UD&>Kg-iR#Dn!=+b3NsZmK3SNlC}tbu`=*US zRAzk-9I1?b5|y!9Q5hLj8QT~tV;e(d$rWO^Sc<|G;{M&F5VLlJLL{{ij~ay_QiV_% z6+&fH2$fMGR7QnR85KfhyG0>pc9zTbfSI17%A*(co{0gN=tgH;FJw}TLX57hJMY3# z=hlw9d1V`)qTZ?c33%`%J0>5)ma_uXmTbik#GlMI(nx=O} z5B>>-E2LGKL=n)fO!UFe4aPDMm090L!d3RLjdT`OWn@nMaix~ZUN*AiicmmRu{#x^ zdKW9gfA0oGNNN$TH;O={il8zog335#r7|jl%BTn`qavs*xgr!~5%BFLzs-!TBEF6f zS)wh%(};T1Lf+vqRm9{r*8v_~F$p6MF32Pl(<0mjwzO&>(uKS#TLqR>w#G)fkXL0? z1ocNnP}y!$grseSmtqwm?gOCHVih4fKsBwoE1Ga*svu1O^~F?%UmIm0(hq=C_FcS5 zWtp>Sn5b(br{F{$053`whqmyI$IsWPaH%AhhTgUYB3 zDx)%}jLM+0Q&WKr3JU`S<;+o+GM%v9MXBV$FOvgArofJNAyO7MwYsRXa=dL>9|37#`b zK%`2bGAe<}s01ow(NP(dKxI?{l_gh#;#h*1mDvqw{T5~k&P>#6sA+5MiX}Lsuu-LA zT7v0dN*jtqsst*d5~z$ypfW0f%BTb?qY|hrxe^q|66|s%7_%#tVC=3}f~1yUno$BG zRRWb!2~+{&R#< zkd-kc{F?T~e|iP(VP)^nHn;q{?kqRiFErc zm90dIR93y1+V3h29osS9wSz11tTmf(z5g(EA?;`e_I<0a$Z+$wn)k7XT*>==FYfVv z-+p5%QjQPo9~bPS!to*66%@w6>Sfgxsp@58Dk?I|YAXiHo3|n+vLjj=Gc=WT&)<(f zPeAmt+n>#W^ub_^rb4m~8$y+h!dj{JRSj{Mi>vCAY}R;O}L^|CRE04gOvz zf6vM8Dd!G??|cV8cbOd4(`sitM&i!6oQC@#+{YmW+NvQcvlbcIQX7?7dFRbqExtdM z&G|Ci=ua}K$NQuDURK)Mmragm+3zpdb2i5u&&Y_{ieS%)GH*Q+=gqvikoYr?tBpw7 z3%uuM-f=OR*VmhQLo5oIdvkk5BS-NANKGZ!zzz5HZzQ@Mr6ZYRDslbi&1}3T2sB` zr`1b3S&N}MU0Ts@o`Yk$ddWI$^+|v8>}SVR%tP%qsqXnv@W>WfDJF^>G|ix8Kxc_7 z+IFI&*;?=>Nc=5Tc3=kL$GNpzv)MSgEnpMSfk#WGPJ-9m%W0{$!0A43OSK&$HLUXj zTdIu1JpA0XVjWthjMpUG8Mk`e2jO0ev}vtKq%BpI-DSIac2qSD3QzTp z&3Gf@<){WrOB_*&^Q3Fn+khvfP2+vChx4RsC)|K1rM;w2`gX^?5h*&w*J|m6tPg(N zz^K%nUpcMmW0P)<>uNupc(&^ltoq&YauyuLLhTR>x(2Ed%Q*16me;V3ChDJN*p-6>6# zkUllY)4#DS{B2!j*3A$l+2l4$OA@ZqGUh<8cq&(xtL2bf9Kls>e|XS~pK&+ko;p?p zM!t4{hY|8oZF>Gh#pmN8qdPqHFv|z+t$(9Nx9&U_r8`AYk3Ej_kb(G+kM%}Bh>Fk0 zwIO_b3GconLO&jk;-jX%wXGpOY%XiPz@F>B%W>PW)zdbp4!$qUcFqKP6IjMi@?riqFa4 z#e&ebmU(PR&?u7Imi*3bTg?Y)MImBI_A>&l^QjvjA$HoPgn7F2cM0 zGu&<->fJnePIDj%hf^gjd!3fzKt$!XU+R|%9P51-zi09L|JeH$IIF69|2;A)9#O`( zR@y0#IvVH*h)AXbq7F4MqoU$-W`F@EhnZ0k9*6?8~^Wj{q|ma?REA!`|NY}q07DP4~O-e?|!cD@3(&Iz1B%qnwbR* z1xKVM?62h4BU=}$wc66EFG8v*=?)OnRz!WJ29-zFSB9Wo*i_Zhl68oT19C8aMCL1` z9)D$Bq)Q>JTz(oAOd$WIeIZi$CG+I#OgbH8xRfH zJNUjg@f(6)#sxd7WMi872>Bfg5YjfsY1^cfQo9EU#?p*n#U^*R*ckr9JQy3F5^}*vjN7@k2M|cAMM(q0-C-^+2vj@S1ly51eoQ*gq z*o&@Y0#suo$iyfe1BVKXZOrAIxZD^ukmgUgkDQh8mO_S0|}>&#SzcvGn9L=(*VDZ zd-#}X;8Z~T<_3iP?#V8nf6-}xQcCT~A=nyRC0L+MuS`By;i-06(B$(?({@94Ny)!2 zLR?~vZ4vSiTMn;BAomhGrIb=@mJ2or1_Voz*Ohpx-KJ&ox-7y@bGH_V%crrkKn3_b zK=VmS>{Kw?sbER+c@LgyPxCYRd_BTW?bZ3?vS}>NpNGxdj_x?=eyHY?lJF@Q`4lWk zKA*r-?ZsP6KK~M#(hP2{+;%(lv2)%;6boWu9R$kwHi;gS7kJL{!t{) zet{u(t@ya?8cW6JVYeI~yIylkNmf1*Yy(&jEJ+*wGM;KLo@{dak4SFaLT{c`wd1n; z{3u;%&BJbaKB7_k2udk6lUp#Bx&%v--$(FNd;K1h-@g>gZ}{TWap^VIrp`;RnlES8 zKlr`Hmc2fz`K2WM3PyefOOoFx-%uAh?7YxYzH#X_mUzxXZ#lkUx%Lf|#5V{=-ym3$ z+@cR1;~h>7G(ecPyD*~sWvri_yBcm>YK_Hk^H5us-F`-MOG&sDjNA&AB)4D1Q|A=m zHXUiVVFLjCG0PZ0AD7|rBcok!SsdT48;dAOJy)<7!G>T-a*Qb(Is4U__B$?;b+)Y!I;%EJ0a>jpcU%A(m=4>B*!W%-65Yx|`n zbqc{)rw}Yjo>$|kh3XXFi{`n&@_BLHgR!h)9(v2M;d?c=l*Bg(M&BS2X-ospYnl#f~g_=0YY;+fH_XM zL2c8%Zu1ULvZuuBMU&35=HZwNNt)Ni#-l6k{+5ahxFFt@1O3;OXlJYs>jAAm*4m<=6ISNHq+3K z!0$c_A;0}>gd-4k=nRUIY+okW)9zV!idoX+vJ~4`fZV}?_+CDFV3s7QLh1LH90 z&CRLe5S-DTfRf}?f(?QJ!D3qPkfN;jD|o!!)o5Dpg9Ql=b~Kj6^fl3je51NV8*)yO zAP&+0r7f9~G=B-k<}bl2LNq|gyKMX@G++j!gT*p!B63uuy zuA^4_WlBng*FXQocucb-!Q3WkK&}Uf^&DS0iY0tN)OSC@t!OQL

    NU;yBt~ib?aC$be$>&CydSGB(Y%-AW(KsI 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 literal 0 HcmV?d00001 diff --git a/Code/Physics/lib/Release/BulletFileLoader.lib b/Code/Physics/lib/Release/BulletFileLoader.lib new file mode 100644 index 0000000000000000000000000000000000000000..b1ff3742023e96109c7ac3532915ed30ef61e091 GIT binary patch literal 192098 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 K8f)Q1tL5LFuo-gz literal 0 HcmV?d00001 diff --git a/Code/Physics/lib/Release/BulletFileLoaderx64.lib b/Code/Physics/lib/Release/BulletFileLoaderx64.lib new file mode 100644 index 0000000000000000000000000000000000000000..d3b423fd2930ec1fe563cf98f31c3f8833a1720f GIT binary patch literal 323882 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
    + + @@ -8,4 +13,11 @@ + + + + .\..\Content\ + + + diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs index bd168c3c..73ef627c 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs @@ -36,7 +36,6 @@ this.label_listenPort = new System.Windows.Forms.Label(); this.panel_serverOptions = new System.Windows.Forms.Panel(); this.panel_commands = new System.Windows.Forms.Panel(); - this.mapName = new System.Windows.Forms.TextBox(); this.timeLimit = new System.Windows.Forms.NumericUpDown(); this.gameModes = new System.Windows.Forms.ComboBox(); this.label3 = new System.Windows.Forms.Label(); @@ -52,6 +51,22 @@ this.splitter1 = new System.Windows.Forms.Splitter(); this.clientInfoBox = new System.Windows.Forms.ListBox(); this.panel_CommanArea = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.mapName = new System.Windows.Forms.ComboBox(); + this.panelServerCommands = new System.Windows.Forms.Panel(); + this.buttonExecuteSend = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.dataProtocolFields = new System.Windows.Forms.TableLayoutPanel(); + this.buttonAddNewDataField = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.buttonsAtBottom = new System.Windows.Forms.TableLayoutPanel(); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).BeginInit(); this.panel_serverOptions.SuspendLayout(); this.panel_commands.SuspendLayout(); @@ -59,13 +74,20 @@ ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).BeginInit(); this.panel_clientArea.SuspendLayout(); this.panel_CommanArea.SuspendLayout(); + this.panelServerCommands.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + this.dataProtocolFields.SuspendLayout(); + this.buttonsAtBottom.SuspendLayout(); this.SuspendLayout(); // // serverToggle // - this.serverToggle.Location = new System.Drawing.Point(9, 106); + this.serverToggle.Dock = System.Windows.Forms.DockStyle.Bottom; + this.serverToggle.Location = new System.Drawing.Point(0, 83); this.serverToggle.Name = "serverToggle"; - this.serverToggle.Size = new System.Drawing.Size(75, 23); + this.serverToggle.Size = new System.Drawing.Size(241, 20); this.serverToggle.TabIndex = 0; this.serverToggle.Text = "Start server"; this.serverToggle.UseVisualStyleBackColor = true; @@ -140,46 +162,40 @@ this.panel_serverOptions.Dock = System.Windows.Forms.DockStyle.Top; this.panel_serverOptions.Location = new System.Drawing.Point(0, 0); this.panel_serverOptions.Name = "panel_serverOptions"; - this.panel_serverOptions.Size = new System.Drawing.Size(200, 141); + this.panel_serverOptions.Size = new System.Drawing.Size(241, 103); this.panel_serverOptions.TabIndex = 6; // // panel_commands // - this.panel_commands.Controls.Add(this.mapName); this.panel_commands.Controls.Add(this.timeLimit); + this.panel_commands.Controls.Add(this.mapName); this.panel_commands.Controls.Add(this.gameModes); this.panel_commands.Controls.Add(this.label3); this.panel_commands.Controls.Add(this.forceStart); this.panel_commands.Controls.Add(this.label2); this.panel_commands.Controls.Add(this.label4); + this.panel_commands.Controls.Add(this.label5); this.panel_commands.Controls.Add(this.labelClientsConnected); this.panel_commands.Controls.Add(this.label1); this.panel_commands.Controls.Add(this.nrOfClients); this.panel_commands.Controls.Add(this.buttonStartGame); - this.panel_commands.Location = new System.Drawing.Point(3, 150); + this.panel_commands.Dock = System.Windows.Forms.DockStyle.Top; + this.panel_commands.Location = new System.Drawing.Point(0, 103); this.panel_commands.Name = "panel_commands"; - this.panel_commands.Size = new System.Drawing.Size(191, 202); + this.panel_commands.Size = new System.Drawing.Size(241, 188); this.panel_commands.TabIndex = 7; this.panel_commands.Visible = false; // - // mapName - // - this.mapName.Location = new System.Drawing.Point(75, 10); - this.mapName.Name = "mapName"; - this.mapName.Size = new System.Drawing.Size(113, 20); - this.mapName.TabIndex = 12; - this.mapName.Text = "2ofAll_updated.bias"; - // // timeLimit // - this.timeLimit.Location = new System.Drawing.Point(109, 94); + this.timeLimit.Location = new System.Drawing.Point(112, 89); this.timeLimit.Minimum = new decimal(new int[] { 5, 0, 0, 0}); this.timeLimit.Name = "timeLimit"; - this.timeLimit.Size = new System.Drawing.Size(68, 20); + this.timeLimit.Size = new System.Drawing.Size(123, 20); this.timeLimit.TabIndex = 11; this.timeLimit.ThousandsSeparator = true; this.timeLimit.Value = new decimal(new int[] { @@ -195,9 +211,9 @@ this.gameModes.Items.AddRange(new object[] { "Free-for-all", "Team death-match"}); - this.gameModes.Location = new System.Drawing.Point(78, 66); + this.gameModes.Location = new System.Drawing.Point(77, 61); this.gameModes.Name = "gameModes"; - this.gameModes.Size = new System.Drawing.Size(110, 21); + this.gameModes.Size = new System.Drawing.Size(158, 21); this.gameModes.TabIndex = 10; // // label3 @@ -242,11 +258,11 @@ // labelClientsConnected // this.labelClientsConnected.AutoSize = true; - this.labelClientsConnected.Location = new System.Drawing.Point(9, 149); + this.labelClientsConnected.Location = new System.Drawing.Point(131, 147); this.labelClientsConnected.Name = "labelClientsConnected"; - this.labelClientsConnected.Size = new System.Drawing.Size(104, 13); + this.labelClientsConnected.Size = new System.Drawing.Size(80, 13); this.labelClientsConnected.TabIndex = 8; - this.labelClientsConnected.Text = "Clients connected: 0"; + this.labelClientsConnected.Text = "Game clients: 0"; // // label1 // @@ -259,7 +275,7 @@ // // nrOfClients // - this.nrOfClients.Location = new System.Drawing.Point(78, 36); + this.nrOfClients.Location = new System.Drawing.Point(72, 34); this.nrOfClients.Maximum = new decimal(new int[] { 20, 0, @@ -271,7 +287,7 @@ 0, 0}); this.nrOfClients.Name = "nrOfClients"; - this.nrOfClients.Size = new System.Drawing.Size(39, 20); + this.nrOfClients.Size = new System.Drawing.Size(163, 20); this.nrOfClients.TabIndex = 7; this.nrOfClients.Value = new decimal(new int[] { 10, @@ -281,9 +297,10 @@ // // buttonStartGame // - this.buttonStartGame.Location = new System.Drawing.Point(9, 176); + this.buttonStartGame.Dock = System.Windows.Forms.DockStyle.Bottom; + this.buttonStartGame.Location = new System.Drawing.Point(0, 166); this.buttonStartGame.Name = "buttonStartGame"; - this.buttonStartGame.Size = new System.Drawing.Size(75, 23); + this.buttonStartGame.Size = new System.Drawing.Size(241, 22); this.buttonStartGame.TabIndex = 6; this.buttonStartGame.Text = "Start game"; this.buttonStartGame.UseVisualStyleBackColor = true; @@ -295,9 +312,9 @@ this.panel_clientArea.Controls.Add(this.splitter1); this.panel_clientArea.Controls.Add(this.clientInfoBox); this.panel_clientArea.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel_clientArea.Location = new System.Drawing.Point(200, 0); + this.panel_clientArea.Location = new System.Drawing.Point(241, 0); this.panel_clientArea.Name = "panel_clientArea"; - this.panel_clientArea.Size = new System.Drawing.Size(535, 616); + this.panel_clientArea.Size = new System.Drawing.Size(494, 616); this.panel_clientArea.TabIndex = 8; // // ServerInfoTextArea @@ -307,19 +324,19 @@ this.ServerInfoTextArea.Dock = System.Windows.Forms.DockStyle.Fill; this.ServerInfoTextArea.Font = new System.Drawing.Font("GulimChe", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.ServerInfoTextArea.ForeColor = System.Drawing.SystemColors.Info; - this.ServerInfoTextArea.Location = new System.Drawing.Point(0, 152); + this.ServerInfoTextArea.Location = new System.Drawing.Point(0, 269); this.ServerInfoTextArea.Name = "ServerInfoTextArea"; this.ServerInfoTextArea.ReadOnly = true; - this.ServerInfoTextArea.Size = new System.Drawing.Size(535, 464); + this.ServerInfoTextArea.Size = new System.Drawing.Size(494, 347); this.ServerInfoTextArea.TabIndex = 1; this.ServerInfoTextArea.Text = ""; // // splitter1 // this.splitter1.Dock = System.Windows.Forms.DockStyle.Top; - this.splitter1.Location = new System.Drawing.Point(0, 147); + this.splitter1.Location = new System.Drawing.Point(0, 264); this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(535, 5); + this.splitter1.Size = new System.Drawing.Size(494, 5); this.splitter1.TabIndex = 2; this.splitter1.TabStop = false; // @@ -329,19 +346,221 @@ this.clientInfoBox.FormattingEnabled = true; this.clientInfoBox.Location = new System.Drawing.Point(0, 0); this.clientInfoBox.Name = "clientInfoBox"; - this.clientInfoBox.Size = new System.Drawing.Size(535, 147); + this.clientInfoBox.Size = new System.Drawing.Size(494, 264); this.clientInfoBox.TabIndex = 0; // // panel_CommanArea // + this.panel_CommanArea.Controls.Add(this.panelServerCommands); this.panel_CommanArea.Controls.Add(this.panel_commands); this.panel_CommanArea.Controls.Add(this.panel_serverOptions); this.panel_CommanArea.Dock = System.Windows.Forms.DockStyle.Left; this.panel_CommanArea.Location = new System.Drawing.Point(0, 0); this.panel_CommanArea.Name = "panel_CommanArea"; - this.panel_CommanArea.Size = new System.Drawing.Size(200, 616); + this.panel_CommanArea.Size = new System.Drawing.Size(241, 616); this.panel_CommanArea.TabIndex = 9; // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(23, 147); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(81, 13); + this.label5.TabIndex = 8; + this.label5.Text = "Lobby clients: 0"; + // + // mapName + // + this.mapName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.mapName.FormattingEnabled = true; + this.mapName.IntegralHeight = false; + this.mapName.Items.AddRange(new object[] { + "Set default"}); + this.mapName.Location = new System.Drawing.Point(72, 7); + this.mapName.Name = "mapName"; + this.mapName.Size = new System.Drawing.Size(163, 21); + this.mapName.TabIndex = 10; + // + // panelServerCommands + // + this.panelServerCommands.Controls.Add(this.dataProtocolFields); + this.panelServerCommands.Dock = System.Windows.Forms.DockStyle.Top; + this.panelServerCommands.Location = new System.Drawing.Point(0, 291); + this.panelServerCommands.Name = "panelServerCommands"; + this.panelServerCommands.Size = new System.Drawing.Size(241, 85); + this.panelServerCommands.TabIndex = 8; + this.panelServerCommands.Visible = false; + // + // buttonExecuteSend + // + this.buttonExecuteSend.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonExecuteSend.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonExecuteSend.Location = new System.Drawing.Point(116, 0); + this.buttonExecuteSend.Margin = new System.Windows.Forms.Padding(0); + this.buttonExecuteSend.Name = "buttonExecuteSend"; + this.buttonExecuteSend.Size = new System.Drawing.Size(117, 21); + this.buttonExecuteSend.TabIndex = 0; + this.buttonExecuteSend.Text = "Send"; + this.buttonExecuteSend.UseVisualStyleBackColor = true; + // + // panel2 + // + this.panel2.Controls.Add(this.button2); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Controls.Add(this.comboBox1); + this.panel2.Controls.Add(this.numericUpDown1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(4, 32); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(233, 21); + this.panel2.TabIndex = 0; + // + // comboBox1 + // + this.comboBox1.Dock = System.Windows.Forms.DockStyle.Left; + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.IntegralHeight = false; + this.comboBox1.Items.AddRange(new object[] { + "netBool;", + "netChar;", + "netUChar;", + "netShort;", + "netUShort;", + "netInt;", + "netUInt;", + "netInt64;", + "netUInt64;", + "netFloat;", + "netDouble;", + "netCharPtr;"}); + this.comboBox1.Location = new System.Drawing.Point(42, 0); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(78, 21); + this.comboBox1.TabIndex = 10; + // + // numericUpDown1 + // + this.numericUpDown1.Dock = System.Windows.Forms.DockStyle.Left; + this.numericUpDown1.Location = new System.Drawing.Point(0, 0); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(42, 20); + this.numericUpDown1.TabIndex = 11; + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Left; + this.textBox1.Location = new System.Drawing.Point(120, 0); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(64, 20); + this.textBox1.TabIndex = 12; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single; + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35.29412F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 64.70588F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 110F)); + this.tableLayoutPanel1.Controls.Add(this.label6, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label7, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.label8, 2, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(4, 4); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 27.05882F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(233, 21); + this.tableLayoutPanel1.TabIndex = 9; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(4, 1); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(18, 13); + this.label6.TabIndex = 8; + this.label6.Text = "ID"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(46, 1); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(31, 13); + this.label7.TabIndex = 8; + this.label7.Text = "Type"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(123, 1); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(34, 13); + this.label8.TabIndex = 8; + this.label8.Text = "Value"; + // + // dataProtocolFields + // + this.dataProtocolFields.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single; + this.dataProtocolFields.ColumnCount = 1; + this.dataProtocolFields.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 21F)); + this.dataProtocolFields.Controls.Add(this.panel2, 0, 1); + this.dataProtocolFields.Controls.Add(this.tableLayoutPanel1, 0, 0); + this.dataProtocolFields.Controls.Add(this.buttonsAtBottom, 0, 2); + this.dataProtocolFields.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataProtocolFields.Location = new System.Drawing.Point(0, 0); + this.dataProtocolFields.Margin = new System.Windows.Forms.Padding(0); + this.dataProtocolFields.Name = "dataProtocolFields"; + this.dataProtocolFields.RowCount = 3; + this.dataProtocolFields.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.dataProtocolFields.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.dataProtocolFields.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.dataProtocolFields.Size = new System.Drawing.Size(241, 85); + this.dataProtocolFields.TabIndex = 9; + // + // buttonAddNewDataField + // + this.buttonAddNewDataField.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonAddNewDataField.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonAddNewDataField.Location = new System.Drawing.Point(0, 0); + this.buttonAddNewDataField.Margin = new System.Windows.Forms.Padding(0); + this.buttonAddNewDataField.Name = "buttonAddNewDataField"; + this.buttonAddNewDataField.Size = new System.Drawing.Size(116, 21); + this.buttonAddNewDataField.TabIndex = 1; + this.buttonAddNewDataField.Text = "Add field"; + this.buttonAddNewDataField.UseVisualStyleBackColor = true; + this.buttonAddNewDataField.Click += new System.EventHandler(this.buttonAddNewDataField_Click); + // + // button2 + // + this.button2.Dock = System.Windows.Forms.DockStyle.Fill; + this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Black; + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Location = new System.Drawing.Point(184, 0); + this.button2.Margin = new System.Windows.Forms.Padding(0); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(49, 21); + this.button2.TabIndex = 0; + this.button2.Text = "remove"; + this.button2.UseVisualStyleBackColor = true; + // + // buttonsAtBottom + // + this.buttonsAtBottom.ColumnCount = 2; + this.buttonsAtBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.buttonsAtBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.buttonsAtBottom.Controls.Add(this.buttonAddNewDataField, 0, 0); + this.buttonsAtBottom.Controls.Add(this.buttonExecuteSend, 1, 0); + this.buttonsAtBottom.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonsAtBottom.Location = new System.Drawing.Point(4, 60); + this.buttonsAtBottom.Name = "buttonsAtBottom"; + this.buttonsAtBottom.RowCount = 1; + this.buttonsAtBottom.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.buttonsAtBottom.Size = new System.Drawing.Size(233, 21); + this.buttonsAtBottom.TabIndex = 10; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -361,6 +580,14 @@ ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).EndInit(); this.panel_clientArea.ResumeLayout(false); this.panel_CommanArea.ResumeLayout(false); + this.panelServerCommands.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.dataProtocolFields.ResumeLayout(false); + this.buttonsAtBottom.ResumeLayout(false); this.ResumeLayout(false); } @@ -387,10 +614,25 @@ private System.Windows.Forms.NumericUpDown timeLimit; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox mapName; private System.Windows.Forms.CheckBox forceStart; private System.Windows.Forms.Label labelClientsConnected; private System.Windows.Forms.Panel panel_CommanArea; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox mapName; + private System.Windows.Forms.Panel panelServerCommands; + private System.Windows.Forms.Button buttonExecuteSend; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.TableLayoutPanel dataProtocolFields; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button buttonAddNewDataField; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.TableLayoutPanel buttonsAtBottom; } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.cs index 58deb2a9..8b7e9474 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.cs @@ -11,6 +11,7 @@ using System.Windows.Interop; using System.Runtime.InteropServices; using System.Threading; using System.Timers; +using System.IO; namespace StandAloneLauncher { @@ -18,12 +19,22 @@ namespace StandAloneLauncher { System.Windows.Interop.StandaloneGameServerCLI gameServer; bool serverIsRunning = false; + bool gameIsStarted = false; public Form1() { InitializeComponent(); + + string[] maps = Directory.GetFiles("..\\Content\\Worlds\\"); + + for (int i = 0; i < maps.Length; i++) + { + string temp = maps[i].Split('\\').Last() ; + this.mapName.Items.Add(temp); + } + this.gameModes.SelectedIndex = 0; - + this.mapName.SelectedIndex = 0; } public bool Initiate() @@ -55,6 +66,7 @@ namespace StandAloneLauncher this.serverToggle.Text = "Start server"; this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Server terminated!\n"); this.panel_commands.Visible = false; + this.panelServerCommands.Visible = false; } else { @@ -77,6 +89,7 @@ namespace StandAloneLauncher this.gameServer.ServerStart(); this.panel_commands.Visible = true; this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Server initiated!\n\tListening on port " + this.listenPort.Value.ToString() + "\n\tLocal IP: " + info.serverIp + "\n"); + this.panelServerCommands.Visible = true; } else { @@ -87,18 +100,38 @@ namespace StandAloneLauncher private void buttonStartGame_Click(object sender, EventArgs e) { - //this.gameServer.GameSetGameMode(this.gameModes.SelectedText); - this.gameServer.GameSetGameTime((int)this.timeLimit.Value); - this.gameServer.GameSetMapName(this.mapName.Text); - this.gameServer.GameSetMaxClients((int)this.nrOfClients.Value); - - if (!this.gameServer.GameStart( this.forceStart.Checked )) + if (!gameIsStarted) { - this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to start the game session!\n"); + //this.gameServer.GameSetGameMode(this.gameModes.SelectedText); + this.gameServer.GameSetGameTime((int)this.timeLimit.Value); + this.gameServer.GameSetMapName(this.mapName.Text); + this.gameServer.GameSetMaxClients((int)this.nrOfClients.Value); + + if (!(gameIsStarted = this.gameServer.GameStart(this.forceStart.Checked))) + { + this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to start the game session!\n"); + } + else + { + this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Game session started!\n"); + this.buttonStartGame.Text = "Stop Game"; + + this.mapName.Enabled = false; + this.nrOfClients.Enabled = false; + this.gameModes.Enabled = false; + this.timeLimit.Enabled = false; + this.forceStart.Enabled = false; + } } else { - this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Game session started!\n"); + this.gameIsStarted = false; + this.buttonStartGame.Text = "Start Game"; + this.mapName.Enabled = true; + this.nrOfClients.Enabled = true; + this.gameModes.Enabled = true; + this.timeLimit.Enabled = true; + this.forceStart.Enabled = true; } } @@ -109,5 +142,17 @@ namespace StandAloneLauncher this.gameServer.ServerStop(); } } + + private void buttonAddNewDataField_Click(object sender, EventArgs e) + { + this.dataProtocolFields.RowCount++; + this.dataProtocolFields.SetRow(this.buttonsAtBottom, this.dataProtocolFields.RowCount - 1); + + Panel p = new Panel(); + p = this.panel2; + + this.dataProtocolFields.RowStyles.Add(new RowStyle(SizeType.Absolute, 27)); + + } } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.Designer.cs index 18c7c5f4..5c383ce6 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.Designer.cs @@ -8,23 +8,31 @@ // //------------------------------------------------------------------------------ -namespace StandAloneLauncher.Properties -{ - - +namespace StandAloneLauncher.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + + public static Settings Default { + get { return defaultInstance; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute(".\\..\\Content\\")] + public string Dennis { + get { + return ((string)(this["Dennis"])); + } + set { + this["Dennis"] = value; + } + } } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.settings b/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.settings index 39645652..f260c659 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.settings +++ b/Code/Game/LanServer/StandAloneLauncher/Properties/Settings.settings @@ -1,7 +1,9 @@  - - - - - - + + + + + .\..\Content\ + + + \ No newline at end of file diff --git a/Code/Game/LanServer/StandAloneLauncher/StandAloneLauncher.csproj b/Code/Game/LanServer/StandAloneLauncher/StandAloneLauncher.csproj index 2d2c86fe..ec2a45b0 100644 --- a/Code/Game/LanServer/StandAloneLauncher/StandAloneLauncher.csproj +++ b/Code/Game/LanServer/StandAloneLauncher/StandAloneLauncher.csproj @@ -80,6 +80,7 @@ + From ca2695293f5ed7b795bdb8fad05a5865c4e9cca9 Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Wed, 19 Feb 2014 09:25:40 +0100 Subject: [PATCH 34/36] Added reconnect (not tested). Added check for level parser not finding file. --- Code/Network/NetworkAPI/NetworkClient.cpp | 5 +++ Code/Network/NetworkAPI/NetworkClient.h | 5 +++ .../NetworkDependencies/Connection.cpp | 34 +++++++++++++++++++ Code/Network/NetworkDependencies/Connection.h | 6 ++++ .../Network/NetworkDependencies/IConnection.h | 3 ++ 5 files changed, 53 insertions(+) diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp index 69872fc1..6f2998e9 100644 --- a/Code/Network/NetworkAPI/NetworkClient.cpp +++ b/Code/Network/NetworkAPI/NetworkClient.cpp @@ -317,6 +317,11 @@ bool NetworkClient::Connect(unsigned short port, std::wstring serverIP) return this->Connect(port, ip.c_str()); } +bool NetworkClient::Reconnect() +{ + return this->privateData->connection.Reconnect(); +} + void NetworkClient::Disconnect() { if(!privateData) return; diff --git a/Code/Network/NetworkAPI/NetworkClient.h b/Code/Network/NetworkAPI/NetworkClient.h index 6f037117..a7f3b0bb 100644 --- a/Code/Network/NetworkAPI/NetworkClient.h +++ b/Code/Network/NetworkAPI/NetworkClient.h @@ -93,6 +93,11 @@ namespace Oyster */ bool Connect(unsigned short port, std::wstring serverIP); + /**Tries to connect with the same port and ip it earlier used for Connect. + * + */ + bool Reconnect(); + /** * */ diff --git a/Code/Network/NetworkDependencies/Connection.cpp b/Code/Network/NetworkDependencies/Connection.cpp index 99cb8a71..a9abf75c 100644 --- a/Code/Network/NetworkDependencies/Connection.cpp +++ b/Code/Network/NetworkDependencies/Connection.cpp @@ -58,6 +58,9 @@ int Connection::Connect(unsigned short port , const char serverName[], bool bloc { if(this->socket == -1 || this->socket == 0) InitiateSocket(); + lastConnectPort = port; + lastConnectAddr = serverName; + struct hostent *hostEnt; if((hostEnt = gethostbyname(serverName)) == NULL) { @@ -83,6 +86,37 @@ int Connection::Connect(unsigned short port , const char serverName[], bool bloc return 0; } +int Connection::Reconnect() +{ + if(this->socket == -1 || this->socket == 0) InitiateSocket(); + + struct hostent *hostEnt; + if((hostEnt = gethostbyname(lastConnectAddr.c_str())) == NULL) + { + return WSAGetLastError(); + } + + struct sockaddr_in server; + server.sin_family = AF_INET; + server.sin_port = htons(lastConnectPort); + server.sin_addr.s_addr = *(unsigned long*) hostEnt->h_addr; + + SetBlockingMode(true); + + if(connect(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) + { + return WSAGetLastError(); + } + + closed = false; + stillSending = true; + + SetBlockingMode(blocking); + + //connection succesfull! + return 0; +} + int Connection::InitiateServer(unsigned short port) { int errorCode = 0; diff --git a/Code/Network/NetworkDependencies/Connection.h b/Code/Network/NetworkDependencies/Connection.h index 0f46a599..054537fc 100644 --- a/Code/Network/NetworkDependencies/Connection.h +++ b/Code/Network/NetworkDependencies/Connection.h @@ -28,6 +28,7 @@ namespace Oyster virtual int Disconnect(); virtual int Connect(ConnectionInfo info, bool blocking = false); virtual int Connect(unsigned short port , const char serverName[], bool blocking = false); + virtual int Reconnect(); virtual ConnectionInfo Listen(); @@ -47,6 +48,11 @@ namespace Oyster bool stillSending; bool closed; std::string addr; + + std::string lastConnectAddr; + unsigned short lastConnectPort; + + bool blocking; }; } } diff --git a/Code/Network/NetworkDependencies/IConnection.h b/Code/Network/NetworkDependencies/IConnection.h index 7c92f318..debdfe7b 100644 --- a/Code/Network/NetworkDependencies/IConnection.h +++ b/Code/Network/NetworkDependencies/IConnection.h @@ -39,6 +39,9 @@ namespace Oyster //(servers uses Listen instead of connect) virtual int Connect( unsigned short port, const char serverName[] ) { return false; }; + //Tries to connect with the same port and ip used for Connect. + virtual int Reconnect() = 0; + //Disconnects the client or server TODO: optimize! virtual int Disconnect() = 0; }; From 6e80c1c60318e197068bea3142b0797e4a1bae4a Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Wed, 19 Feb 2014 09:39:19 +0100 Subject: [PATCH 35/36] LevelLoader - Added an if check to se if it found the map file. --- .../LevelLoader/LevelParser.cpp | 293 +++++++++--------- 1 file changed, 148 insertions(+), 145 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.cpp b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.cpp index 39d2f625..2fbf5df3 100644 --- a/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.cpp +++ b/Code/Game/GameClient/GameClientState/LevelLoader/LevelParser.cpp @@ -33,184 +33,187 @@ std::vector> LevelParser::Parse(std::string filen Loader loader; char* buffer = (char*)loader.LoadFile(filename.c_str(), bufferSize); - //Read format version - LevelLoaderInternal::FormatVersion levelFormatVersion; - ParseObject(&buffer[counter], &levelFormatVersion, sizeof(levelFormatVersion)); - counter += sizeof(levelFormatVersion); - if(this->formatVersion != levelFormatVersion) + if(buffer) { - //Returns an empty vector, because it will most likely fail to read the level format. - return objects; - } - - while(counter < bufferSize) - { - loadCgf = true; - //Get typeID - ObjectType typeID; - ParseObject(&buffer[counter], &typeID, sizeof(typeID)); - switch((int)typeID) + //Read format version + LevelLoaderInternal::FormatVersion levelFormatVersion; + ParseObject(&buffer[counter], &levelFormatVersion, sizeof(levelFormatVersion)); + counter += sizeof(levelFormatVersion); + if(this->formatVersion != levelFormatVersion) { - case ObjectType_LevelMetaData: + //Returns an empty vector, because it will most likely fail to read the level format. + return objects; + } + + while(counter < bufferSize) + { + loadCgf = true; + //Get typeID + ObjectType typeID; + ParseObject(&buffer[counter], &typeID, sizeof(typeID)); + switch((int)typeID) { - SmartPointer header = new LevelMetaData; - ParseLevelMetaData(&buffer[counter], *(LevelMetaData*)header.Get(), counter); - objects.push_back(header); - break; - } - - case ObjectType_SpawnPoint: - { - loadCgf = false; - ObjectHeader* header = new ObjectHeader; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - SpawnPointAttributes* spawn = new SpawnPointAttributes; - - spawn->typeID = header->typeID; - - for(int i = 0; i < 3; i++) + case ObjectType_LevelMetaData: { - spawn->position[i] = header->position[i]; + SmartPointer header = new LevelMetaData; + ParseLevelMetaData(&buffer[counter], *(LevelMetaData*)header.Get(), counter); + objects.push_back(header); + break; } - delete header; - //objects.push_back(header); - objects.push_back(spawn); - break; - } - - //This is by design, static and dynamic is using the same converter. Do not add anything inbetween them. - //Unless they are changed to not be the same. - case ObjectType_Static: case ObjectType_Dynamic: - { - //Get specialType. - ObjectSpecialType specialType; - ParseObject(&buffer[counter+4], &specialType, sizeof(typeID)); - - switch(specialType) + case ObjectType_SpawnPoint: { - //there is no difference when parsing these specialTypes. - case ObjectSpecialType_CrystalShard: - case ObjectSpecialType_CrystalFormation: - case ObjectSpecialType_Spike: - case ObjectSpecialType_SpikeBox: - case ObjectSpecialType_RedExplosiveBox: - case ObjectSpecialType_StandarsBox: - case ObjectSpecialType_Stone: - case ObjectSpecialType_Building: - { - ObjectHeader* header = new ObjectHeader; - ParseObject(&buffer[counter], *header, counter, loadCgf); - objects.push_back(header); + loadCgf = false; + ObjectHeader* header = new ObjectHeader; + ParseObject(&buffer[counter], *header, counter, loadCgf); - break; + SpawnPointAttributes* spawn = new SpawnPointAttributes; + + spawn->typeID = header->typeID; + + for(int i = 0; i < 3; i++) + { + spawn->position[i] = header->position[i]; } - case ObjectSpecialType_JumpPad: + delete header; + //objects.push_back(header); + objects.push_back(spawn); + break; + } + + //This is by design, static and dynamic is using the same converter. Do not add anything inbetween them. + //Unless they are changed to not be the same. + case ObjectType_Static: case ObjectType_Dynamic: + { + //Get specialType. + ObjectSpecialType specialType; + ParseObject(&buffer[counter+4], &specialType, sizeof(typeID)); + + switch(specialType) { - JumpPadAttributes* header = new JumpPadAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); + //there is no difference when parsing these specialTypes. + case ObjectSpecialType_CrystalShard: + case ObjectSpecialType_CrystalFormation: + case ObjectSpecialType_Spike: + case ObjectSpecialType_SpikeBox: + case ObjectSpecialType_RedExplosiveBox: + case ObjectSpecialType_StandarsBox: + case ObjectSpecialType_Stone: + case ObjectSpecialType_Building: + { + ObjectHeader* header = new ObjectHeader; + ParseObject(&buffer[counter], *header, counter, loadCgf); + objects.push_back(header); - //Read the spec - ParseObject(&buffer[counter], header->direction, 16); - counter += 16; - objects.push_back(header); + break; + } - break; - } + case ObjectSpecialType_JumpPad: + { + JumpPadAttributes* header = new JumpPadAttributes; + ParseObject(&buffer[counter], *header, counter, loadCgf); + + //Read the spec + ParseObject(&buffer[counter], header->direction, 16); + counter += 16; + objects.push_back(header); + + break; + } - case ObjectSpecialType_Portal: - { - PortalAttributes* header = new PortalAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); + case ObjectSpecialType_Portal: + { + PortalAttributes* header = new PortalAttributes; + ParseObject(&buffer[counter], *header, counter, loadCgf); - ParseObject(&buffer[counter], header->destination, 12); - counter += 12; - objects.push_back(header); + ParseObject(&buffer[counter], header->destination, 12); + counter += 12; + objects.push_back(header); - break; - } + break; + } - case ObjectSpecialType_World: - { - WorldAttributes* header = new WorldAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); + case ObjectSpecialType_World: + { + WorldAttributes* header = new WorldAttributes; + ParseObject(&buffer[counter], *header, counter, loadCgf); - ParseObject(&buffer[counter], &header->worldSize, 8); - counter += 8; - objects.push_back(header); - break; - } + ParseObject(&buffer[counter], &header->worldSize, 8); + counter += 8; + objects.push_back(header); + break; + } - case ObjectSpecialType_Sky: - { - loadCgf = false; - SkyAttributes* header = new SkyAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); + case ObjectSpecialType_Sky: + { + loadCgf = false; + SkyAttributes* header = new SkyAttributes; + ParseObject(&buffer[counter], *header, counter, loadCgf); - ParseObject(&buffer[counter], &header->skySize, 4); - counter += 4; - objects.push_back(header); - break; - } - //this is a hotfix, fix so you only load the relevant data when the file is updated + ParseObject(&buffer[counter], &header->skySize, 4); + counter += 4; + objects.push_back(header); + break; + } + //this is a hotfix, fix so you only load the relevant data when the file is updated - default: - //Couldn't find specialType - break; + default: + //Couldn't find specialType + break; + } + break; } - break; - } - case ObjectType_Light: - { - LightType lightType; + case ObjectType_Light: + { + LightType lightType; - //Get Light type - ParseObject(&buffer[counter+4], &lightType, sizeof(lightType)); + //Get Light type + ParseObject(&buffer[counter+4], &lightType, sizeof(lightType)); - //We only support PointLight for now. - BasicLight* header = new BasicLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - /*switch(lightType) - { - case LightType_PointLight: - { - PointLight* header = new PointLight; + //We only support PointLight for now. + BasicLight* header = new BasicLight; ParseObject(&buffer[counter], header, sizeof(*header)); counter += sizeof(*header); objects.push_back(header); - break; - } - case LightType_DirectionalLight: - { - DirectionalLight* header = new DirectionalLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - break; - } - case LightType_SpotLight: - { - SpotLight* header = new SpotLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - break; + /*switch(lightType) + { + case LightType_PointLight: + { + PointLight* header = new PointLight; + ParseObject(&buffer[counter], header, sizeof(*header)); + counter += sizeof(*header); + objects.push_back(header); + break; + } + case LightType_DirectionalLight: + { + DirectionalLight* header = new DirectionalLight; + ParseObject(&buffer[counter], header, sizeof(*header)); + counter += sizeof(*header); + objects.push_back(header); + break; + } + case LightType_SpotLight: + { + SpotLight* header = new SpotLight; + ParseObject(&buffer[counter], header, sizeof(*header)); + counter += sizeof(*header); + objects.push_back(header); + break; + } + default: + //Undefined LightType. + break; + } + break;*/ } default: - //Undefined LightType. + //Couldn't find typeID. FAIL!!!!!! break; - } - break;*/ } - default: - //Couldn't find typeID. FAIL!!!!!! - break; } } From fa95e6b8213d1aff707f02fa7fe18fbe3a551396 Mon Sep 17 00:00:00 2001 From: Robin Engman Date: Wed, 19 Feb 2014 10:55:59 +0100 Subject: [PATCH 36/36] Linda fixing some lvl loading stuff --- Code/Game/GameClient/GameClientRecieverFunc.h | 192 ------------------ .../GameClient/GameClientState/GameState.cpp | 12 +- .../GameClientState/LanMenuState.cpp | 4 +- .../GameClientState/NetLoadState.cpp | 10 +- Code/Game/GameLogic/Game_PlayerData.cpp | 2 +- Code/Game/GameLogic/Level.cpp | 39 ++-- 6 files changed, 37 insertions(+), 222 deletions(-) delete mode 100644 Code/Game/GameClient/GameClientRecieverFunc.h diff --git a/Code/Game/GameClient/GameClientRecieverFunc.h b/Code/Game/GameClient/GameClientRecieverFunc.h deleted file mode 100644 index 673cbdd1..00000000 --- a/Code/Game/GameClient/GameClientRecieverFunc.h +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef DANBIAS_CLIENTRECIEVEROBJECT_H -#define DANBIAS_CLIENTRECIEVEROBJECT_H - -//WTF!? No headers included??? -#include "../DanBiasGame/Include/DanBiasGame.h" -#include "../GameProtocols/GeneralProtocols.h" -#include "../GameProtocols/Protocols.h" -#include "../Network/NetworkAPI/NetworkClient.h" -#include "GameClientState\GameClientState.h" -#include "GameClientState\GameState.h" - -#include - -namespace DanBias -{ - struct GameRecieverObject : public Oyster::Network::NetworkClient - { - Client::GameClientState* gameClientState; - - // receiver function for server messages - // parsing protocols and sending it to the gameState - //void NetworkCallback(Oyster::Network::CustomNetProtocol& p) override - void GameRecieverObject::DataRecieved( Oyster::Network::NetEvent e ) override - { - Oyster::Network::CustomNetProtocol p = e.args.data.protocol; - int pType = p[0].value.netInt; - - //printf("Message(%i) arrived at client(%i)\n", pType, this->GetID()); - - - switch (pType) - { - case protocol_General_Status: - { - GameLogic::Protocol_General_Status::States state; - state = (GameLogic::Protocol_General_Status::States)p[1].value.netShort; - if( state == GameLogic::Protocol_General_Status::States_disconected) - { - // server disconnected - DanBiasGame::Release(); - } - } - break; - case protocol_Gameplay_ObjectCreate: - { - Client::GameClientState::NewObj protocolData;// = new Client::GameClientState::NewObj; - protocolData.object_ID = p[1].value.netInt; - protocolData.path = p[2].value.netCharPtr; - for(int i = 0; i< 16; i++) - { - protocolData.worldPos[i] = p[i+3].value.netFloat; - } - - if(dynamic_cast(gameClientState)) - ((Client::GameState*)gameClientState)->Protocol(&protocolData); - - //delete p[2].value.netCharPtr; //delete char array - //delete protocolData; - //protocolData = NULL; - } - break; - case protocol_Gameplay_ObjectDisabled: - { - Client::GameClientState::RemoveObj* protocolData = new Client::GameClientState::RemoveObj; - protocolData->object_ID = p[1].value.netInt; - - if(dynamic_cast(gameClientState)) - ((Client::GameState*)gameClientState)->Protocol(protocolData); - - delete protocolData; - protocolData = NULL; - } - break; - case protocol_Gameplay_ObjectPosition: - { - // 0: reserved - // 1: objectID - // 2,3,4: position - // 5,6,7,8: rotation quaternion - - GameLogic::Protocol_ObjectPosition data(p); - - Client::GameClientState::ObjPos protocolData; - protocolData.object_ID = data.object_ID; - //protocolData.object_ID = p[1].value.netInt; - - for( int i = 0; i < 3; ++i ) - { - protocolData.position[i] = data.position[i]; - } - - //for(int i = 0; i< 16; i++) - //{ - // protocolData.worldPos[i] = p[i+2].value.netFloat; - //} - - if(dynamic_cast(gameClientState)) - ((Client::GameState*)gameClientState)->Protocol(&protocolData); - } - break; - case protocol_Gameplay_ObjectPositionRotation: - { - - Client::GameClientState::ObjPos protocolData; - protocolData.object_ID = p[1].value.netInt; - for(int i = 0; i< 16; i++) - { - protocolData.worldPos[i] = p[i+2].value.netFloat; - } - - if(dynamic_cast(gameClientState)) - ((Client::GameState*)gameClientState)->Protocol(&protocolData); - } - break; - case protocol_Lobby_Create: - { - if(dynamic_cast(gameClientState)) - { - int id = p.Get(1).value.netInt; - std::string name = p.Get(19).value.netCharPtr; - Oyster::Math::Float4x4 w; - for(int i = 0; i< 16; i++) - { - w[i] = p[i+2].value.netFloat; - } - - gameClientState->Release(); - delete gameClientState; - - gameClientState = new Client::GameState(); - gameClientState->Init(this); - std::wstring temp; - Utility::String::StringToWstring(name, temp); - ((Client::GameState*)gameClientState)->InitiatePlayer(id, temp, w); - - //Do some wait state? - } - } - break; - case protocol_Lobby_Start: - { - if(dynamic_cast(gameClientState)) - { - //Game state should start in n seconds - GameLogic::Protocol_LobbyStartGame p(p); - p.seconds; - - //Sleep((int)(p.seconds * 1000)); - } - } - break; - - default: - break; - } - - if(ProtocolIsLobby(p[0].value.netInt)) ParseLobbyProtocol(p); - } - - void ParseLobbyProtocol(Oyster::Network::CustomNetProtocol& p) - { - switch (p[0].value.netShort) - { - case protocol_General_Status: //this->GeneralStatus (Protocol_General_Status (p), c); - break; - case protocol_General_Text: //this->GeneralText (Protocol_General_Text (p), c); - break; - //case protocol_Lobby_Create: this->LobbyCreateGame (Protocol_LobbyCreateGame (p), c); - //break; - case protocol_Lobby_Start: //this->LobbyStartGame (Protocol_LobbyStartGame (p), c); - break; - //case protocol_Lobby_Join: this->LobbyJoin (Protocol_LobbyJoin (p), c); - //break; - case protocol_Lobby_Login: //this->LobbyLogin (Protocol_LobbyLogin (p), c); - break; - case protocol_Lobby_Refresh: //this->LobbyRefresh (Protocol_LobbyRefresh (p), c); - break; - case protocol_Lobby_GameData: //this->LobbyGameData (Protocol_LobbyGameData (p), c); - { - //GameLogic::Protocol_LobbyGameData temp(p); - //printf("%s, %i.%i\n", temp.mapName.c_str(), temp.majorVersion, temp.minorVersion); - } - break; - case protocol_Lobby_ClientData: //this->LobbyMainData (Protocol_LobbyClientData (p), c); - break; - //case protocol_Lobby_GameData: this->LobbyGameData (Protocol_LobbyGameData (p), c); - //break; - } - } - }; -} -#endif \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index bfd15532..7c23a910 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -187,7 +187,7 @@ void GameState::ReadKeyInput() { if( this->privData->input->IsKeyPressed(DIK_W) ) { - if(!this->privData->key_forward) + //if(!this->privData->key_forward) { this->privData->nwClient->Send( Protocol_PlayerMovementForward() ); this->privData->key_forward = true; @@ -198,7 +198,7 @@ void GameState::ReadKeyInput() if( this->privData->input->IsKeyPressed(DIK_S) ) { - if( !this->privData->key_backward ) + //if( !this->privData->key_backward ) { this->privData->nwClient->Send( Protocol_PlayerMovementBackward() ); this->privData->key_backward = true; @@ -209,7 +209,7 @@ void GameState::ReadKeyInput() if( this->privData->input->IsKeyPressed(DIK_A) ) { - if( !this->privData->key_strafeLeft ) + //if( !this->privData->key_strafeLeft ) { this->privData->nwClient->Send( Protocol_PlayerMovementLeft() ); this->privData->key_strafeLeft = true; @@ -220,7 +220,7 @@ void GameState::ReadKeyInput() if( this->privData->input->IsKeyPressed(DIK_D) ) { - if( !this->privData->key_strafeRight ) + //if( !this->privData->key_strafeRight ) { this->privData->nwClient->Send( Protocol_PlayerMovementRight() ); this->privData->key_strafeRight = true; @@ -372,7 +372,9 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState if( this->privData->myId == decoded.object_ID ) { this->privData->camera.SetPosition( position ); - this->privData->camera.SetRotation( rotation ); + //this->privData->camera.SetRotation( rotation ); + this->privData->player.setPos( position ); + //this->privData->player.setRot( rotation ); } C_DynamicObj *object = (*this->privData->dynamicObjects)[decoded.object_ID]; diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 11ca95da..8c096617 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -60,8 +60,8 @@ bool LanMenuState::Init( SharedStateContent &shared ) // create guiElements this->privData->connectIP = new TextField( L"color_white.png", Float4(1.0f), Float4(0.0f), this, Float3(0.5f, 0.3f, 0.5f), Float2(0.8f, 0.09f), ResizeAspectRatio_None ); this->privData->connectIP->ReserveLines( 1 ); - //this->privData->connectIP->AppendText( L"127.0.0.1" ); - this->privData->connectIP->AppendText( L"194.47.150.206" ); // HACK: connecting to Dennis's server + this->privData->connectIP->AppendText( L"127.0.0.1" ); + //this->privData->connectIP->AppendText( L"194.47.150.206" ); // HACK: connecting to Dennis's server this->privData->connectIP->SetFontHeight( 0.08f ); this->privData->connectIP->SetLineSpacing( 0.005f ); this->privData->connectIP->SetTopAligned(); diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 29906d77..fac7b00c 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -140,7 +140,15 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) desc.rotation = ArrayToQuaternion( oh->rotation ); desc.scale = oh->scale; desc.visible = true; - + + // HACK: untill the world is right in lvl format + if( oh->specialTypeID == ObjectSpecialType_World) + { + desc.position = Float3(0,0,0); + desc.rotation = Quaternion::identity; + desc.scale = Float3(300,300,300); + } + C_StaticObj *staticObject = new C_StaticObj(); if( staticObject->Init( desc ) ) { diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index e7a77bbd..f403c04c 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -7,7 +7,7 @@ Game::PlayerData::PlayerData() { //set some stats that are appropriate to a player - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(50,130,0); + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); Oyster::Math::Float mass = 60; diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 4106dabf..a5d42657 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -26,14 +26,14 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { case ObjectSpecialType_None: { - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_Sky: { float skySize = ((SkyAttributes*)obj)->skySize; - //gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + //gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_World: @@ -44,21 +44,21 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) float worldSize = ((WorldAttributes*)obj)->worldSize; float atmosphereSize = ((WorldAttributes*)obj)->atmoSphereSize; - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_Building: { - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } case ObjectSpecialType_Stone: { - gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_StandardBox: { - gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_RedExplosiveBox: @@ -75,24 +75,24 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) // break; case ObjectSpecialType_SpikeBox: { - gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_Spike: { - gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_CrystalFormation: { int dmg = 50; //gameObj = new Crystal(rigidBody); - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_CrystalShard: { - gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; case ObjectSpecialType_JumpPad: @@ -100,13 +100,13 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) float power = 500; //((JumpPadAttributes*)obj)->power; Oyster::Math::Float3 dir = ((JumpPadAttributes*)obj)->direction; Oyster::Math::Float3 pushForce = dir * power; - gameObj = new JumpPad(rigidBody, (ObjectSpecialType)obj->specialTypeID, objID++ , pushForce); + gameObj = new JumpPad(rigidBody, (ObjectSpecialType)obj->specialTypeID, objID , pushForce); } break; case ObjectSpecialType_Portal: { Oyster::Math::Float3 destination = ((PortalAttributes*)obj)->destination; - gameObj = new Portal(rigidBody, (ObjectSpecialType)obj->specialTypeID, objID++, destination); + gameObj = new Portal(rigidBody, (ObjectSpecialType)obj->specialTypeID, objID, destination); } break; //case ObjectSpecialType_SpawnPoint: @@ -122,12 +122,12 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) break; case ObjectSpecialType_Generic: { - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; default: { - gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID++); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID, objID); } break; } @@ -213,6 +213,7 @@ bool Level::InitiateLevel(std::wstring levelPath) for (int i = 0; i < objCount; i++) { + ++this->objID; ObjectTypeHeader* obj = objects.at(i); switch (obj->typeID) { @@ -229,13 +230,10 @@ bool Level::InitiateLevel(std::wstring levelPath) staticObjData->ModelFile; ICustomBody* rigidBody_Static = NULL; - if((ObjectSpecialType)staticObjData->specialTypeID == ObjectSpecialType_Sky) - { - - } + + // HACK: untill the world is right in lvl format if((ObjectSpecialType)staticObjData->specialTypeID == ObjectSpecialType_World) { - Oyster::Math::Float3 rigidWorldPos; Oyster::Math::Float4 rigidWorldRotation; float rigidBodyMass; @@ -249,9 +247,8 @@ bool Level::InitiateLevel(std::wstring levelPath) rigidWorldRotation = Oyster::Math::Float4(0,0,0,1); - //mass scaled - rigidBodyMass = 100; + rigidBodyMass = 0; //Radius scaled rigidBodyRadius = 150;

    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 z%0A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 QubNpkqw;Fb%&iLiKi#t$)&Kwi literal 0 HcmV?d00001 From 06ddb86b17d19b35fd3fc107d4bb8c935001fc42 Mon Sep 17 00:00:00 2001 From: Erik Persson Date: Tue, 18 Feb 2014 11:33:36 +0100 Subject: [PATCH 13/36] GL - GetAllDynamicObjects , dennis order --- Code/Game/GameLogic/Game.h | 2 ++ Code/Game/GameLogic/GameAPI.h | 2 ++ Code/Game/GameLogic/Game_LevelData.cpp | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/Code/Game/GameLogic/Game.h b/Code/Game/GameLogic/Game.h index 93e130f5..b8f6d4b3 100644 --- a/Code/Game/GameLogic/Game.h +++ b/Code/Game/GameLogic/Game.h @@ -61,6 +61,8 @@ namespace GameLogic ObjectSpecialType GetObjectType() const override; int getNrOfDynamicObj()const override; IObjectData* GetObjectAt(int ID) const override; + Utility::DynamicMemory::DynamicArray GetAllDynamicObjects() const override; + Level *level; }; diff --git a/Code/Game/GameLogic/GameAPI.h b/Code/Game/GameLogic/GameAPI.h index 30e86e8c..2a24c99e 100644 --- a/Code/Game/GameLogic/GameAPI.h +++ b/Code/Game/GameLogic/GameAPI.h @@ -13,6 +13,7 @@ #include "GameLogicStates.h" #include #include "LevelLoader\ObjectDefines.h" +#include "DynamicArray.h" namespace GameLogic @@ -107,6 +108,7 @@ namespace GameLogic public: virtual int getNrOfDynamicObj()const = 0; virtual IObjectData* GetObjectAt(int ID) const = 0; + virtual Utility::DynamicMemory::DynamicArray GetAllDynamicObjects() const = 0; }; class DANBIAS_GAMELOGIC_DLL GameAPI diff --git a/Code/Game/GameLogic/Game_LevelData.cpp b/Code/Game/GameLogic/Game_LevelData.cpp index b007ce01..4529e787 100644 --- a/Code/Game/GameLogic/Game_LevelData.cpp +++ b/Code/Game/GameLogic/Game_LevelData.cpp @@ -50,4 +50,16 @@ int Game::LevelData::getNrOfDynamicObj()const IObjectData* Game::LevelData::GetObjectAt(int ID) const { return this->level->GetObj(ID); +} + +Utility::DynamicMemory::DynamicArray Game::LevelData::GetAllDynamicObjects() const +{ + Utility::DynamicMemory::DynamicArray objects(level->dynamicObjects.Size()); + + for(int i = 0; i < level->dynamicObjects.Size(); i++) + { + objects[i] = level->dynamicObjects[i]; + } + + return objects; } \ No newline at end of file From f6f183d6e7453c399063160a45a833ebbd55fa16 Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 18 Feb 2014 11:34:24 +0100 Subject: [PATCH 14/36] GameServer - Added inititiate protocols --- Code/Game/GameServer/GameClient.h | 34 ++++-- Code/Game/GameServer/GameLobby.h | 19 ++- Code/Game/GameServer/GameServerAPI.h | 17 +-- Code/Game/GameServer/GameSession.h | 19 +-- .../GameServer/Implementation/GameClient.cpp | 25 +++- .../GameServer/Implementation/GameLobby.cpp | 98 +++++++++++++--- .../GameLobby_ProtocolParser.cpp | 37 +++--- .../GameServer/Implementation/GameServer.cpp | 51 ++++---- .../Implementation/GameSession_Gameplay.cpp | 22 ++-- .../Implementation/GameSession_General.cpp | 110 ++++++++++-------- .../StandaloneGameServerCLI.cpp | 26 +++-- .../StandaloneGameServerCLI.h | 8 +- Code/Network/NetworkAPI/NetworkSession.h | 4 +- 13 files changed, 311 insertions(+), 159 deletions(-) diff --git a/Code/Game/GameServer/GameClient.h b/Code/Game/GameServer/GameClient.h index 09b3bc40..422df933 100644 --- a/Code/Game/GameServer/GameClient.h +++ b/Code/Game/GameServer/GameClient.h @@ -5,6 +5,7 @@ #define DANBIASSERVER_CLIENT_OBJECT_H #include +#include #include #include #include @@ -17,22 +18,21 @@ namespace DanBias class GameClient { public: - GameClient(Utility::DynamicMemory::SmartPointer client, GameLogic::IPlayerData* player); + GameClient(Utility::DynamicMemory::SmartPointer nwClient); virtual~GameClient(); - GameLogic::IPlayerData* GetPlayer(); - GameLogic::IPlayerData* ReleasePlayer(); - Utility::DynamicMemory::SmartPointer GetClient(); - Utility::DynamicMemory::SmartPointer ReleaseClient(); - inline bool operator==(const GameLogic::IPlayerData* c) { return (this->player) ? (c->GetID() == this->player->GetID()) : false ; } - inline bool operator==(const Oyster::Network::NetworkClient* c) { return (c->GetID() == this->GetID()); } + inline bool operator==(const Oyster::Network::NetworkClient* c) { return (c->GetID() == this->client->GetID()); } - inline float GetSinceLastResponse() const { return this->secondsSinceLastResponse; } - inline std::wstring GetAlias() const { return this->alias; } - inline std::wstring GetCharacter() const { return this->character; } - inline bool IsReady() const { return this->isReady; } - inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } + inline bool Equals(const GameLogic::IPlayerData* c) { return (this->player) ? (c->GetID() == this->player->GetID()) : false ; } + inline bool Equals(const Oyster::Network::NetworkClient* c) { return (c->GetID() == this->client->GetID()); } + + inline float GetSinceLastResponse() const { return this->secondsSinceLastResponse; } + inline std::wstring GetAlias() const { return this->alias; } + inline std::wstring GetCharacter() const { return this->character; } + inline bool IsReady() const { return this->isReady; } + inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } + Oyster::Network::NetClient GetClient() const { return this->client; } void SetPlayer(GameLogic::IPlayerData* player); @@ -41,6 +41,13 @@ namespace DanBias void SetCharacter(std::wstring character); void SetSinceLastResponse(float seconds); + GameLogic::IPlayerData* ReleasePlayer(); + Oyster::Network::NetClient ReleaseClient(); + + //NetworkSpecific + void SetOwner(Oyster::Network::NetworkSession* owner); + void UpdateClient(); + private: GameLogic::IPlayerData* player; Utility::DynamicMemory::SmartPointer client; @@ -52,4 +59,7 @@ namespace DanBias std::wstring character; }; }//End namespace DanBias + +typedef Utility::DynamicMemory::SmartPointer gClient; + #endif // !DANBIASSERVER_CLIENT_OBJECT_H diff --git a/Code/Game/GameServer/GameLobby.h b/Code/Game/GameServer/GameLobby.h index ac4db486..9281dcd6 100644 --- a/Code/Game/GameServer/GameLobby.h +++ b/Code/Game/GameServer/GameLobby.h @@ -15,11 +15,18 @@ namespace DanBias { struct LobbyLevelData { - int mapNumber; int maxClients; - int gameMode; - int gameTime; - std::string gameName; + int gameTimeInMinutes; + std::wstring gameMode; + std::wstring mapName; + std::wstring gameName; + LobbyLevelData() + : maxClients(10) + , gameTimeInMinutes(10) + , gameMode(L"unknown") + , mapName(L"unknown") + , gameName(L"unknown") + { } }; class GameLobby :public Oyster::Network::NetworkSession { @@ -49,6 +56,8 @@ namespace DanBias private: void ClientEventCallback(Oyster::Network::NetEvent e) override; void ClientConnectedEvent(Utility::DynamicMemory::SmartPointer client) override; + void ProcessClients() override; + bool Attach(Utility::DynamicMemory::SmartPointer client) override; private: //Utility::WinTimer timer; @@ -58,7 +67,7 @@ namespace DanBias GameSession gameSession; LobbyLevelData description; Utility::DynamicMemory::SmartPointer sessionOwner; - + Utility::DynamicMemory::DynamicArray> gClients; }; }//End namespace DanBias #endif // !DANBIASGAME_GAMELOBBY_H diff --git a/Code/Game/GameServer/GameServerAPI.h b/Code/Game/GameServer/GameServerAPI.h index a9e8c63f..eb5316c4 100644 --- a/Code/Game/GameServer/GameServerAPI.h +++ b/Code/Game/GameServer/GameServerAPI.h @@ -55,15 +55,18 @@ namespace DanBias static void NotifyWhenClientConnect(ClientConnectedNotify func); static void NotifyWhenClientDisconnect(ClientDisconnectedNotify func); - static void GameSetMapName(const wchar_t* val); - static void GameSetMaxClients(const int& val); - static void GameSetGameMode(const wchar_t* val); static void GameSetGameTime(const int& val); - static int GameGetMapId(); - static int GameGetMaxClients(); - static int GameGetGameMode(); + static void GameSetMaxClients(const int& val); + static void GameSetGameName(const wchar_t* val); + static void GameSetMapName(const wchar_t* val); + static void GameSetGameMode(const wchar_t* val); + static int GameGetGameTime(); - static const char* GameGetGameName(); + static int GameGetMaxClients(); + static const wchar_t* GameGetGameMode(); + static const wchar_t* GameGetGameName(); + static const wchar_t* GameGetMapName(); + static bool GameStart(); diff --git a/Code/Game/GameServer/GameSession.h b/Code/Game/GameServer/GameSession.h index 8cd04048..200bed9b 100644 --- a/Code/Game/GameServer/GameSession.h +++ b/Code/Game/GameServer/GameSession.h @@ -32,11 +32,11 @@ namespace DanBias struct GameDescription { unsigned int maxClients; - std::string mapName; - std::string gameMode; + std::wstring mapName; + std::wstring gameMode; int gameTimeMinutes; Oyster::Network::NetworkSession* owner; - Utility::DynamicMemory::DynamicArray clients; + Utility::DynamicMemory::DynamicArray> clients; }; public: @@ -52,17 +52,19 @@ namespace DanBias /** Join an existing/running game session * @param client The client to attach to the session */ - bool Attach(Oyster::Network::NetClient client) override; - void CloseSession( bool dissconnectClients ) override; + bool Join(gClient client); + + //void CloseSession( bool dissconnectClients ) override; inline bool IsCreated() const { return this->isCreated; } inline bool IsRunning() const { return this->isRunning; } - operator bool() { return (this->isCreated && this->isCreated); } + operator bool() { return (this->isCreated && this->isRunning); } //Private member functions private: // Client event callback function void ClientEventCallback(Oyster::Network::NetEvent e) override; + void ProcessClients() override; //Sends a client to the owner, if param is NULL then all clients is sent void SendToOwner(DanBias::GameClient* obj); @@ -98,8 +100,8 @@ namespace DanBias //Private member variables private: - Utility::DynamicMemory::DynamicArray> clients; - Utility::DynamicMemory::SmartPointer sessionOwner; + Utility::DynamicMemory::DynamicArray gClients; + gClient sessionOwner; Oyster::Thread::OysterThread worker; GameLogic::GameAPI& gameInstance; GameLogic::ILevelData *levelData; @@ -115,6 +117,7 @@ namespace DanBias //TODO: Remove this uggly hax static GameSession* gameSession; + };//End GameSession }//End namespace DanBias #endif // !DANBIASSERVER_GAME_SESSION_H \ No newline at end of file diff --git a/Code/Game/GameServer/Implementation/GameClient.cpp b/Code/Game/GameServer/Implementation/GameClient.cpp index 6e68b1e8..7ef4a338 100644 --- a/Code/Game/GameServer/Implementation/GameClient.cpp +++ b/Code/Game/GameServer/Implementation/GameClient.cpp @@ -12,8 +12,9 @@ using namespace DanBias; using namespace GameLogic; -GameClient::GameClient() +GameClient::GameClient(Utility::DynamicMemory::SmartPointer nwClient) { + this->client = nwClient; this->player = 0; isReady = false; this->character = L"Unknown"; @@ -51,3 +52,25 @@ void GameClient::SetCharacter(std::wstring character) } +void GameClient::SetOwner(Oyster::Network::NetworkSession* owner) +{ + this->client->SetOwner(owner); +} +void GameClient::UpdateClient() +{ + this->client->Update(); +} + + +IPlayerData* GameClient::ReleasePlayer() +{ + IPlayerData* temp = this->player; + this->player = 0; + return temp; +} +NetClient GameClient::ReleaseClient() +{ + NetClient temp = this->client; + this->client = 0; + return temp; +} diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index 2a297e2f..f2467750 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -14,7 +14,7 @@ using namespace GameLogic; using namespace DanBias; GameLobby::GameLobby() -{ } +{ } GameLobby::~GameLobby() { this->clients.Clear(); @@ -37,16 +37,33 @@ void GameLobby::Update() void GameLobby::SetGameDesc(const LobbyLevelData& desc) { this->description.gameMode = desc.gameMode; - this->description.gameTime = desc.gameTime; - this->description.mapNumber = desc.mapNumber; + this->description.gameName = desc.gameName; + this->description.mapName = desc.mapName; + this->description.gameTimeInMinutes = desc.gameTimeInMinutes; this->description.maxClients = desc.maxClients; + + if(this->gClients.Size() > (unsigned int)desc.maxClients) + { + //Kick overflow + for (unsigned int i = (unsigned int)desc.maxClients - 1; i < this->gClients.Size(); i++) + { + if(this->gClients[i]) + { + this->gClients[i]->GetClient()->Disconnect(); + } + } + } + this->gClients.Resize((unsigned int)desc.maxClients); + } void GameLobby::GetGameDesc(LobbyLevelData& desc) { - desc.gameMode = this->description.gameMode; - desc.gameTime = this->description.gameTime; - desc.mapNumber = this->description.mapNumber; + desc.gameTimeInMinutes = this->description.gameTimeInMinutes; desc.maxClients = this->description.maxClients; + desc.mapName = this->description.mapName; + desc.gameName = this->description.gameName; + desc.gameMode = this->description.gameMode; + } bool GameLobby::StartGameSession( ) { @@ -56,10 +73,10 @@ bool GameLobby::StartGameSession( ) GameSession::GameDescription desc; desc.maxClients = this->description.maxClients; desc.gameMode = this->description.gameMode; - desc.gameTimeMinutes = this->description.gameTime; + desc.gameTimeMinutes = this->description.gameTimeInMinutes; //desc.mapName = this->description.mapNumber; desc.owner = this; - desc.clients = this->clients; + desc.clients = this->gClients; if(desc.gameTimeMinutes == 0) desc.gameTimeMinutes = 10; //note: should be fetched from somewhere. @@ -67,7 +84,7 @@ bool GameLobby::StartGameSession( ) if(desc.maxClients == 0) desc.maxClients = 10; //note: should be fetched somewhere else.. - this->clients.Clear(); //Remove clients from lobby list + this->gClients.Clear(); //Remove clients from lobby list if(this->gameSession.Create(desc)) { @@ -96,8 +113,8 @@ void GameLobby::ClientEventCallback(NetEventGetID(), e.sender->GetIpAddress().c_str()); e.sender->Disconnect(); - this->readyList.Remove(e.sender); - this->clients.Remove(e.sender); + //this->readyList.Remove(e.sender); + //this->gClients.Remove(e.sender); break; case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: printf("\t(%i : %s) - EventType_ProtocolRecieved\n", e.sender->GetID(), e.sender->GetIpAddress().c_str()); @@ -111,21 +128,30 @@ void GameLobby::ClientConnectedEvent(Utility::DynamicMemory::SmartPointergameSession) { - Attach(client); + if(!this->Attach(client)) + { + client->Disconnect(); + } } else { - Attach(client); + if(!this->Attach(client)) + { + //Send message that lobby full + client->Disconnect(); + return; + } + Protocol_LobbyClientData p1; Protocol_LobbyGameData p2; - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]) + if(this->gClients[i]) { Protocol_LobbyClientData::PlayerData t; - t.id = this->clients[i]->GetID(); - t.ip = this->clients[i]->GetIpAddress(); + t.id = client->GetID(); + t.ip = client->GetIpAddress(); t.team = 0; t.name = "Dennis är kung tycker Erik!"; p1.list.Push(t); @@ -139,4 +165,42 @@ void GameLobby::ClientConnectedEvent(Utility::DynamicMemory::SmartPointerSend(p2.GetProtocol()); } } +void GameLobby::ProcessClients() +{ + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(this->gClients[i]) + { + this->gClients[i]->UpdateClient(); + } + } +} +bool GameLobby::Attach(Utility::DynamicMemory::SmartPointer client) +{ + if(this->clientCount = this->description.maxClients) return false; + + bool added = false; + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(!this->gClients[i]) + { + added = true; + this->gClients[i] = new GameClient(client); + } + } + + if(!added) + { + this->gClients.Push(new GameClient(client)); + } + return true; +} + + + + + + + + diff --git a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp index 81758480..ebcfb8bf 100644 --- a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp @@ -116,27 +116,34 @@ void GameLobby::LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster: } void GameLobby::LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c) { - NetClient temp; - bool found = false; - - //find client in waiting list - for (unsigned int i = 0; !found && i < this->clients.Size(); i++) + if(this->gameSession) { - if(this->clients[i]->GetID() == c->GetID()) + gClient temp; + bool found = false; + + //find client in waiting list + for (unsigned int i = 0; !found && i < this->clients.Size(); i++) { - temp = this->clients[i]; - found = true; + if(this->gClients[i]->GetClient()->GetID() == c->GetID()) + { + temp = this->gClients[i]; + found = true; + } } - } - //Something is wrong - if(!found) - { - c->Disconnect(); + //Something is wrong + if(!found) + { + c->Disconnect(); + } + else + { + //Send game data + this->gameSession.Join(temp); + } } else { - //Send game data - this->gameSession.Attach(temp); + } } diff --git a/Code/Game/GameServer/Implementation/GameServer.cpp b/Code/Game/GameServer/Implementation/GameServer.cpp index 087fa7ff..8fbf2111 100644 --- a/Code/Game/GameServer/Implementation/GameServer.cpp +++ b/Code/Game/GameServer/Implementation/GameServer.cpp @@ -118,65 +118,74 @@ void GameServerAPI::NotifyWhenClientDisconnect(ClientDisconnectedNotify func) else clientDisconnectedCallback = func; } -void GameServerAPI::GameSetMapName(const wchar_t* val) +void GameServerAPI::GameSetMapName(const wchar_t* val) { LobbyLevelData d; lobby.GetGameDesc(d); - //d.mapNumber = val; //TODO: implement + d.mapName = val; lobby.SetGameDesc(d); } -void GameServerAPI::GameSetMaxClients(const int& val) +void GameServerAPI::GameSetGameMode(const wchar_t* val) +{ + LobbyLevelData d; + lobby.GetGameDesc(d); + d.gameMode = val; + lobby.SetGameDesc(d); +} +void GameServerAPI::GameSetGameName(const wchar_t* val) +{ + LobbyLevelData d; + lobby.GetGameDesc(d); + d.gameName = val; + lobby.SetGameDesc(d); +} +void GameServerAPI::GameSetMaxClients(const int& val) { LobbyLevelData d; lobby.GetGameDesc(d); d.maxClients = val; lobby.SetGameDesc(d); } -void GameServerAPI::GameSetGameMode(const wchar_t* val) +void GameServerAPI::GameSetGameTime(const int& val) { LobbyLevelData d; lobby.GetGameDesc(d); - //d.gameMode = val; //TODO: implement + d.gameTimeInMinutes = val; lobby.SetGameDesc(d); } -void GameServerAPI::GameSetGameTime(const int& val) + +const wchar_t* GameServerAPI::GameGetMapName() { LobbyLevelData d; lobby.GetGameDesc(d); - d.gameTime = val; - lobby.SetGameDesc(d); + return d.mapName.c_str(); } -int GameServerAPI::GameGetMapId() -{ - LobbyLevelData d; - lobby.GetGameDesc(d); - return d.mapNumber; -} -int GameServerAPI::GameGetMaxClients() +int GameServerAPI::GameGetMaxClients() { LobbyLevelData d; lobby.GetGameDesc(d); return d.maxClients; } -int GameServerAPI::GameGetGameMode() +const wchar_t* GameServerAPI::GameGetGameMode() { LobbyLevelData d; lobby.GetGameDesc(d); - return d.gameMode; + return d.gameMode.c_str(); } -int GameServerAPI::GameGetGameTime() +int GameServerAPI::GameGetGameTime() { LobbyLevelData d; lobby.GetGameDesc(d); - return d.gameTime; + return d.gameTimeInMinutes; } -const char* GameServerAPI::GameGetGameName() +const wchar_t* GameServerAPI::GameGetGameName() { LobbyLevelData d; lobby.GetGameDesc(d); return d.gameName.c_str(); } -bool GameServerAPI::GameStart() + +bool GameServerAPI::GameStart() { if(lobby.StartGameSession()) { diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index d0cf5190..c3319eb3 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -43,9 +43,9 @@ using namespace DanBias; { int temp = -1; //Find the idiot - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]->Equals(e.sender)) + if(this->gClients[i]->Equals(e.sender)) { temp = i; } @@ -56,7 +56,7 @@ using namespace DanBias; this->Detach(e.sender)->Disconnect(); return; } - SmartPointer cl = this->clients[temp]; + SmartPointer cl = this->gClients[temp]; switch (e.args.type) { @@ -70,15 +70,21 @@ using namespace DanBias; break; case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: printf("\t(%i : %s) - EventType_ProtocolRecieved\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); - testID = 2; - if(cl->GetPlayer()->GetID() == testID)//TODO: TEST - { - testTimer.reset(); - } this->ParseProtocol(e.args.data.protocol, cl); break; } } + void GameSession::ProcessClients() + { + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(this->gClients[i]) + { + this->gClients[i]->UpdateClient(); + } + } + } + void GameSession::ObjectMove(GameLogic::IObjectData* movedObject) { diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index cd89dc9a..d0ad30f4 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -3,6 +3,7 @@ ///////////////////////////////////////////////////////////////////// #include "..\GameSession.h" #include "..\GameClient.h" +#include "..\GameLobby.h" #include #include #include @@ -62,9 +63,16 @@ bool GameSession::Create(GameDescription& desc) if(this->isCreated) return false; /* standard initialization of some data */ - NetworkSession::clients = desc.clients; - NetworkSession::clients.Resize((unsigned int)desc.maxClients); - this->clients.Resize((unsigned int)desc.maxClients); + this->gClients.Resize((unsigned int)desc.maxClients); + for (unsigned int i = 0; i < desc.clients.Size(); i++) + { + if(desc.clients[i]) + { + this->clientCount++; + this->gClients[i] = desc.clients[i]; + this->gClients[i]->SetOwner(this); + } + } this->owner = desc.owner; /* Initiate the game instance */ @@ -75,14 +83,13 @@ bool GameSession::Create(GameDescription& desc) /* Create the players in the game instance */ GameLogic::IPlayerData* p = 0; - for (unsigned int i = 0; i < desc.clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(desc.clients[i]) + if(this->gClients[i]) { if( (p = this->gameInstance.CreatePlayer()) ) { - desc.clients[i]->SetOwner(this); - this->clients[i] = (new GameClient(desc.clients[i], p)); + this->gClients[i]->SetPlayer(p); } else { @@ -129,15 +136,15 @@ void GameSession::Run() void GameSession::ThreadEntry( ) { //List with clients that we are waiting on.. - DynamicArray> readyList;// = this->clients; + DynamicArray readyList;// = this->clients; //First we need to clean invalid clients, if any, and tell them to start loading game data - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]) + if(this->gClients[i]) { - readyList.Push(this->clients[i]); - Protocol_LobbyCreateGame p((char)1, (char)0, this->description.mapName); + readyList.Push(this->gClients[i]); + Protocol_LobbyCreateGame p((char)1, (char)0, Utility::String::WStringToString(this->description.mapName, std::string())); readyList[readyList.Size() - 1]->GetClient()->Send(p); } } @@ -153,13 +160,13 @@ void GameSession::ThreadEntry( ) if(readyList[i] && readyList[i]->IsReady()) { //Need to send information about other players, to all players - for (unsigned int k = 0; k < this->clients.Size(); k++) + for (unsigned int k = 0; k < this->gClients.Size(); k++) { - if((this->clients[k] && readyList[i]) && readyList[i]->GetClient()->GetID() != this->clients[k]->GetClient()->GetID()) + if((this->gClients[k] && readyList[i]) && readyList[i]->GetClient()->GetID() != this->gClients[k]->GetClient()->GetID()) { - IPlayerData* pl = this->clients[k]->GetPlayer(); + IPlayerData* pl = this->gClients[k]->GetPlayer(); Protocol_ObjectCreatePlayer p( pl->GetPosition(), pl->GetRotation(), pl->GetScale(), - pl->GetID(), true, this->clients[k]->GetPlayer()->GetTeamID(), + pl->GetID(), true, this->gClients[k]->GetPlayer()->GetTeamID(), /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); readyList[i]->GetClient()->Send(p); } @@ -173,32 +180,31 @@ void GameSession::ThreadEntry( ) } //Sync with clients before starting countdown - - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]) + if(this->gClients[i]) { - this->clients[i]->GetClient()->Send(GameLogic::Protocol_LobbyStartGame(5)); + this->gClients[i]->GetClient()->Send(GameLogic::Protocol_LobbyStartGame(5.0f)); } } } -bool GameSession::Attach(Utility::DynamicMemory::SmartPointer networkClient) +bool GameSession::Join(gClient gameClient) { if(!this->isCreated) return false; - if(this->GetClientCount() == this->clients.Capacity()) return false; + if(this->GetClientCount() == this->gClients.Capacity()) return false; - networkClient->SetOwner(this); + gameClient->SetOwner(this); IPlayerData* playerData = this->gameInstance.CreatePlayer(); if(!playerData) return false; - SmartPointer gameClient = new GameClient(networkClient, playerData); + gameClient->SetPlayer(playerData); NetworkClient* nwClient = gameClient->GetClient(); // Send the level information { - Protocol_LobbyCreateGame lcg((char)1, (char)0, this->description.mapName); + Protocol_LobbyCreateGame lcg((char)1, (char)0, Utility::String::WStringToString(this->description.mapName, std::string())); nwClient->Send(lcg); } @@ -212,11 +218,11 @@ bool GameSession::Attach(Utility::DynamicMemory::SmartPointer net // Send information about other clients { - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(clients[i]) + if(this->gClients[i]) { - IPlayerData* temp = clients[i]->GetPlayer(); + IPlayerData* temp = this->gClients[i]->GetPlayer(); Protocol_ObjectCreatePlayer oc( temp->GetPosition(), temp->GetRotation(), temp->GetScale(), temp->GetID(), false, temp->GetTeamID(), /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); @@ -227,40 +233,44 @@ bool GameSession::Attach(Utility::DynamicMemory::SmartPointer net //TODO: Need to be able to get the current gameplay data from the logic, to sync it with the client { - + } // Insert the new client to the update list + bool added = false; { - bool added = false; - for (unsigned int i = 0; !added && i < this->clients.Size(); i++) + for (unsigned int i = 0; !added && i < this->gClients.Size(); i++) { - if(!clients[i]) + if(!this->gClients[i]) { - NetworkSession::clients[i] = networkClient; - clients[i] = gameClient; + this->gClients[i] = gameClient; + // Send the start signal + { + nwClient->Send(GameLogic::Protocol_LobbyStartGame(0)); + } added = true; + this->clientCount++; } } - if(!added) - { - NetworkSession::clients.Push( networkClient ); - clients.Push( gameClient ); - } - } -// Send the start signal - { - nwClient->Send(GameLogic::Protocol_LobbyStartGame(0)); } - return true; + return added; } -void GameSession::CloseSession( bool dissconnectClients ) -{ - this->worker.Terminate(); - NetworkSession::CloseSession(true); - this->clients.Clear(); -} +//DynamicArray GameSession::CloseSession( bool dissconnectClients ) +//{ +// this->worker.Terminate(); +// //TODO: Send clients to lobby +// +// //for (unsigned int i = 0; i < this->gClients.Size(); i++) +// //{ +// // if(this->gClients[i]) +// // { +// // ((GameLobby*)this->owner)-> this->gClients[i] +// // } +// //} +// +// this->gClients.Clear(); +//} diff --git a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp index 3a10b6ce..0c913a56 100644 --- a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp +++ b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp @@ -72,26 +72,32 @@ void StandaloneGameServerCLI::GameSetMapName(String^ value) pin_ptr wch = PtrToStringChars(value); DanBias::GameServerAPI::GameSetMapName(wch); } +void StandaloneGameServerCLI::GameSetGameMode(String^ value) +{ + pin_ptr wch = PtrToStringChars(value); + DanBias::GameServerAPI::GameSetGameMode(wch); +} +void StandaloneGameServerCLI::GameSetGameName(String^ value) +{ + pin_ptr wch = PtrToStringChars(value); + DanBias::GameServerAPI::GameSetGameName(wch); +} void StandaloneGameServerCLI::GameSetMaxClients(const int val) { DanBias::GameServerAPI::GameSetMaxClients(val); } -void StandaloneGameServerCLI::GameSetGameMode(String^ value) -{ - pin_ptr wch = PtrToStringChars(value); - DanBias::GameServerAPI::GameSetGameMode(wch); -} + void StandaloneGameServerCLI::GameSetGameTime(const int val) { DanBias::GameServerAPI::GameSetGameTime(val); } -int StandaloneGameServerCLI::GameGetMapId() +String^ StandaloneGameServerCLI::GameGetMapName() { - return DanBias::GameServerAPI::GameGetMapId(); + return gcnew String( DanBias::GameServerAPI::GameGetMapName()); } int StandaloneGameServerCLI::GameGetMaxClients() @@ -99,9 +105,9 @@ int StandaloneGameServerCLI::GameGetMaxClients() return DanBias::GameServerAPI::GameGetMaxClients(); } -int StandaloneGameServerCLI::GameGetGameMode() +String^ StandaloneGameServerCLI::GameGetGameMode() { - return DanBias::GameServerAPI::GameGetGameMode(); + return gcnew String( DanBias::GameServerAPI::GameGetGameMode()); } int StandaloneGameServerCLI::GameGetGameTime() @@ -111,7 +117,7 @@ int StandaloneGameServerCLI::GameGetGameTime() String^ StandaloneGameServerCLI::GameGetGameName() { - return gcnew String(DanBias::GameServerAPI::GameGetGameName()); + return gcnew String( DanBias::GameServerAPI::GameGetGameName()); } bool StandaloneGameServerCLI::GameStart() diff --git a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h index 3fdd0713..d71a23b8 100644 --- a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h +++ b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h @@ -47,13 +47,15 @@ namespace System { namespace Windows { namespace Interop bool ServerIsRunning(); void GameSetMapName(String^ val); - void GameSetMaxClients(const int val); void GameSetGameMode(String^ val); + void GameSetGameName(String^ val); + void GameSetMaxClients(const int val); void GameSetGameTime(const int val); - int GameGetMapId(); + int GameGetMaxClients(); - int GameGetGameMode(); int GameGetGameTime(); + System::String^ GameGetMapName(); + System::String^ GameGetGameMode(); System::String^ GameGetGameName(); bool GameStart(); }; diff --git a/Code/Network/NetworkAPI/NetworkSession.h b/Code/Network/NetworkAPI/NetworkSession.h index f0677c77..b4e8e8fe 100644 --- a/Code/Network/NetworkAPI/NetworkSession.h +++ b/Code/Network/NetworkAPI/NetworkSession.h @@ -98,9 +98,9 @@ namespace Oyster protected: NetClientList clients; - - private: int clientCount; + + private: struct PrivateSessionData; PrivateSessionData* data; }; From 484b055338ba41254141983a112a393cea7a4bf7 Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 18 Feb 2014 11:44:02 +0100 Subject: [PATCH 15/36] GL - Call by reference instead --- Code/Game/GameLogic/Game.h | 4 ++-- Code/Game/GameLogic/GameAPI.h | 2 +- Code/Game/GameLogic/Game_LevelData.cpp | 8 ++------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Code/Game/GameLogic/Game.h b/Code/Game/GameLogic/Game.h index b8f6d4b3..9c21ec1b 100644 --- a/Code/Game/GameLogic/Game.h +++ b/Code/Game/GameLogic/Game.h @@ -58,10 +58,10 @@ namespace GameLogic Oyster::Math::Float3 GetScale() override; Oyster::Math::Float4x4 GetOrientation() override; int GetID() const override; - ObjectSpecialType GetObjectType() const override; + ObjectSpecialType GetObjectType() const override; int getNrOfDynamicObj()const override; IObjectData* GetObjectAt(int ID) const override; - Utility::DynamicMemory::DynamicArray GetAllDynamicObjects() const override; + void GetAllDynamicObjects(Utility::DynamicMemory::DynamicArray& mem) const override; Level *level; }; diff --git a/Code/Game/GameLogic/GameAPI.h b/Code/Game/GameLogic/GameAPI.h index 2a24c99e..3325115f 100644 --- a/Code/Game/GameLogic/GameAPI.h +++ b/Code/Game/GameLogic/GameAPI.h @@ -108,7 +108,7 @@ namespace GameLogic public: virtual int getNrOfDynamicObj()const = 0; virtual IObjectData* GetObjectAt(int ID) const = 0; - virtual Utility::DynamicMemory::DynamicArray GetAllDynamicObjects() const = 0; + virtual void GetAllDynamicObjects(Utility::DynamicMemory::DynamicArray& destMem) const = 0; }; class DANBIAS_GAMELOGIC_DLL GameAPI diff --git a/Code/Game/GameLogic/Game_LevelData.cpp b/Code/Game/GameLogic/Game_LevelData.cpp index 4529e787..80220d5f 100644 --- a/Code/Game/GameLogic/Game_LevelData.cpp +++ b/Code/Game/GameLogic/Game_LevelData.cpp @@ -52,14 +52,10 @@ IObjectData* Game::LevelData::GetObjectAt(int ID) const return this->level->GetObj(ID); } -Utility::DynamicMemory::DynamicArray Game::LevelData::GetAllDynamicObjects() const +void Game::LevelData::GetAllDynamicObjects(Utility::DynamicMemory::DynamicArray& mem) const { - Utility::DynamicMemory::DynamicArray objects(level->dynamicObjects.Size()); - for(int i = 0; i < level->dynamicObjects.Size(); i++) { - objects[i] = level->dynamicObjects[i]; + mem[i] = level->dynamicObjects[i]; } - - return objects; } \ No newline at end of file From cec27408966d688d822a1ea906ba011d8f26ccd1 Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 18 Feb 2014 11:56:36 +0100 Subject: [PATCH 16/36] GameServer - Fixed minor miss with inheritance --- Code/Game/GameServer/GameSession.h | 2 ++ .../Implementation/GameSession_Gameplay.cpp | 27 +++++++++++++++++++ .../Implementation/GameSession_General.cpp | 9 ++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Code/Game/GameServer/GameSession.h b/Code/Game/GameServer/GameSession.h index 200bed9b..e6c8a4f9 100644 --- a/Code/Game/GameServer/GameSession.h +++ b/Code/Game/GameServer/GameSession.h @@ -65,6 +65,8 @@ namespace DanBias // Client event callback function void ClientEventCallback(Oyster::Network::NetEvent e) override; void ProcessClients() override; + bool Send(Oyster::Network::CustomNetProtocol& message) override; + bool Send(Oyster::Network::CustomNetProtocol& protocol, int ID) override; //Sends a client to the owner, if param is NULL then all clients is sent void SendToOwner(DanBias::GameClient* obj); diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index c3319eb3..61ccf9c8 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -84,6 +84,33 @@ using namespace DanBias; } } } + bool GameSession::Send(Oyster::Network::CustomNetProtocol& message) + { + bool returnValue = false; + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(this->gClients[i]) + { + this->gClients[i]->GetClient()->Send(message); + returnValue = true; + } + } + + return returnValue; + + } + bool GameSession::Send(Oyster::Network::CustomNetProtocol& protocol, int ID) + { + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(this->gClients[i] && this->gClients[i]->GetClient()->GetID() == ID) + { + this->gClients[i]->GetClient()->Send(protocol); + return true; + } + } + return false; + } void GameSession::ObjectMove(GameLogic::IObjectData* movedObject) diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index d0ad30f4..43f088dd 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -233,7 +233,14 @@ bool GameSession::Join(gClient gameClient) //TODO: Need to be able to get the current gameplay data from the logic, to sync it with the client { - + DynamicArray objects; + this->levelData->GetAllDynamicObjects(objects); + for (unsigned int i = 0; i < objects.Size(); i++) + { + //Protocol_ObjectPosition p(movedObject->GetPosition(), id); + Protocol_ObjectPositionRotation p(objects[i]->GetPosition(), objects[i]->GetRotation(), objects[i]->GetID()); + GameSession::gameSession->Send(p.GetProtocol()); + } } // Insert the new client to the update list From 2e75d168a105b5676c6ce3f7deaebb8258fd5e55 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 12:03:54 +0100 Subject: [PATCH 17/36] New Cameras V2 is quaternion based --- Code/Game/GameClient/GameClient.vcxproj | 4 + .../GameClientState/Camera_BasicV2.cpp | 117 +++++++++++ .../GameClientState/Camera_BasicV2.h | 42 ++++ .../GameClientState/Camera_FPSV2.cpp | 182 ++++++++++++++++++ .../GameClient/GameClientState/Camera_FPSV2.h | 62 ++++++ Code/Misc/OysterMath/Quaternion.h | 7 + 6 files changed, 414 insertions(+) create mode 100644 Code/Game/GameClient/GameClientState/Camera_BasicV2.cpp create mode 100644 Code/Game/GameClient/GameClientState/Camera_BasicV2.h create mode 100644 Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp create mode 100644 Code/Game/GameClient/GameClientState/Camera_FPSV2.h diff --git a/Code/Game/GameClient/GameClient.vcxproj b/Code/Game/GameClient/GameClient.vcxproj index 3daafff3..349a88ec 100644 --- a/Code/Game/GameClient/GameClient.vcxproj +++ b/Code/Game/GameClient/GameClient.vcxproj @@ -201,7 +201,9 @@ + + @@ -226,7 +228,9 @@ + + diff --git a/Code/Game/GameClient/GameClientState/Camera_BasicV2.cpp b/Code/Game/GameClient/GameClientState/Camera_BasicV2.cpp new file mode 100644 index 00000000..8454b3bd --- /dev/null +++ b/Code/Game/GameClient/GameClientState/Camera_BasicV2.cpp @@ -0,0 +1,117 @@ +#include "Camera_BasicV2.h" + +using namespace ::Oyster::Math3D; + +Camera_BasicV2::Camera_BasicV2() +{ + this->translation = Float3::null; + this->rotation = Quaternion::identity; + this->projection = Float4x4::identity; +} + +Camera_BasicV2::Camera_BasicV2( const Float3 &position, const Quaternion &rotation, const Float4x4 &projection ) +{ + this->translation = position; + this->rotation = rotation; + this->projection = projection; +} + +Camera_BasicV2::~Camera_BasicV2() {} + +Camera_BasicV2 & Camera_BasicV2::operator = ( const Camera_BasicV2 &camera ) +{ + this->translation = camera.translation; + this->rotation = camera.rotation; + this->projection = camera.projection; + return *this; +} + +void Camera_BasicV2::SetPosition( const Float3 &translation ) +{ + this->translation = translation; +} + +void Camera_BasicV2::SetRotation( const Quaternion &rotation ) +{ + this->rotation = rotation; +} + +void Camera_BasicV2::SetAngular( const Float3 &axis ) +{ + this->rotation = Rotation( axis ); +} + +void Camera_BasicV2::SetProjection( const Float4x4 &matrix ) +{ + this->projection = matrix; +} + +void Camera_BasicV2::SetOrthographicProjection( Float width, Float height, Float nearClip, Float farClip ) +{ + ProjectionMatrix_Orthographic( width, height, nearClip, farClip, this->projection ); +} + +void Camera_BasicV2::SetPerspectiveProjection( Float verticalFoV, Float aspectRatio, Float nearClip, Float farClip ) +{ + ProjectionMatrix_Perspective( verticalFoV, aspectRatio, nearClip, farClip, this->projection ); +} + +void Camera_BasicV2::Move( const Float3 &deltaPosition ) +{ + this->translation += deltaPosition; +} + +void Camera_BasicV2::Rotate( const Quaternion &deltaRotation ) +{ + this->rotation *= deltaRotation; +} + +void Camera_BasicV2::Rotate( const Float3 &deltaAngularAxis ) +{ + this->rotation *= Rotation( deltaAngularAxis ); +} + +const Float3 & Camera_BasicV2::GetPosition() const +{ + return this->translation; +} + +Float3 & Camera_BasicV2::GetAngularAxis( Float3 &targetMem ) const +{ + return targetMem = AngularAxis( this->rotation ); +} + +Float3 Camera_BasicV2::GetNormalOf( const Float3 &axis ) const +{ + return WorldAxisOf( this->rotation, axis ); +} + +const Quaternion & Camera_BasicV2::GetRotation() const +{ + return this->rotation; +} + +Float3x3 & Camera_BasicV2::GetRotationMatrix( Float3x3 &targetMem ) const +{ + return RotationMatrix( this->rotation, targetMem ); +} + +Float4x4 & Camera_BasicV2::GetRotationMatrix( Float4x4 &targetMem ) const +{ + return RotationMatrix( this->rotation, targetMem ); +} + +Float4x4 & Camera_BasicV2::GetViewMatrix( Float4x4 &targetMem ) const +{ + return ViewMatrix( this->rotation, this->translation, targetMem ); +} + +const Float4x4 & Camera_BasicV2::GetProjectionMatrix() const +{ + return this->projection; +} + +Float4x4 & Camera_BasicV2::GetViewsProjMatrix( Float4x4 &targetMem ) const +{ + return TransformMatrix( this->projection, this->GetViewMatrix(), targetMem ); +} \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/Camera_BasicV2.h b/Code/Game/GameClient/GameClientState/Camera_BasicV2.h new file mode 100644 index 00000000..aaa9d491 --- /dev/null +++ b/Code/Game/GameClient/GameClientState/Camera_BasicV2.h @@ -0,0 +1,42 @@ +#ifndef CAMERA_BASIC_V2_H +#define CAMERA_BASIC_V2_H + +#include "OysterMath.h" + +class Camera_BasicV2 +{ +public: + Camera_BasicV2(); + Camera_BasicV2( const ::Oyster::Math::Float3 &position, const ::Oyster::Math::Quaternion &rotation, const ::Oyster::Math::Float4x4 &projection ); + virtual ~Camera_BasicV2(); + + Camera_BasicV2 & operator = ( const Camera_BasicV2 &camera ); + + void SetPosition( const ::Oyster::Math::Float3 &translation ); + void SetRotation( const ::Oyster::Math::Quaternion &rotation ); + void SetAngular( const ::Oyster::Math::Float3 &axis ); + void SetProjection( const ::Oyster::Math::Float4x4 &matrix ); + void SetOrthographicProjection( ::Oyster::Math::Float width, ::Oyster::Math::Float height, ::Oyster::Math::Float nearClip, ::Oyster::Math::Float farClip ); + void SetPerspectiveProjection( ::Oyster::Math::Float verticalFoV, ::Oyster::Math::Float aspectRatio, ::Oyster::Math::Float nearClip, ::Oyster::Math::Float farClip ); + + void Move( const ::Oyster::Math::Float3 &deltaPosition ); + void Rotate( const ::Oyster::Math::Quaternion &deltaRotation ); + void Rotate( const ::Oyster::Math::Float3 &deltaAngularAxis ); + + const ::Oyster::Math::Float3 & GetPosition() const; + ::Oyster::Math::Float3 & GetAngularAxis( ::Oyster::Math::Float3 &targetMem = ::Oyster::Math::Float3() ) const; + ::Oyster::Math::Float3 GetNormalOf( const ::Oyster::Math::Float3 &axis ) const; + const ::Oyster::Math::Quaternion & GetRotation() const; + ::Oyster::Math::Float3x3 & GetRotationMatrix( ::Oyster::Math::Float3x3 &targetMem ) const; + ::Oyster::Math::Float4x4 & GetRotationMatrix( ::Oyster::Math::Float4x4 &targetMem ) const; + ::Oyster::Math::Float4x4 & GetViewMatrix( Oyster::Math::Float4x4 &targetMem = ::Oyster::Math::Float4x4() ) const; + const ::Oyster::Math::Float4x4 & GetProjectionMatrix() const; + ::Oyster::Math::Float4x4 & GetViewsProjMatrix( Oyster::Math::Float4x4 &targetMem = ::Oyster::Math::Float4x4() ) const; + + private: + ::Oyster::Math::Float3 translation; + mutable ::Oyster::Math::Quaternion rotation; + ::Oyster::Math::Float4x4 projection; +}; + +#endif \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp new file mode 100644 index 00000000..b1863242 --- /dev/null +++ b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp @@ -0,0 +1,182 @@ +#include "Camera_FPSV2.h" +#include "Utilities.h" + +using namespace ::Oyster::Math3D; +using namespace ::Utility::Value; + +Camera_FPSV2::Camera_FPSV2() +{ // this->head is default set to identity uniformprojection at origo + this->pitchUp = 0.0f; + this->headOffset = + this->body.translation = Float3::null; + this->body.rotation = Quaternion::identity; +} + +Camera_FPSV2::~Camera_FPSV2() {} + +Camera_FPSV2 & Camera_FPSV2::operator = ( const Camera_FPSV2 &camera ) +{ + this->head = camera.head; + this->pitchUp = camera.pitchUp; + this->headOffset = camera.headOffset; + this->body.translation = camera.body.translation; + this->body.rotation = camera.body.rotation; + return *this; +} + +void Camera_FPSV2::SetHeadOffset( const Float3 &translation ) +{ + this->head.Move( translation - this->headOffset ); + this->headOffset = translation; +} + +void Camera_FPSV2::SetPosition( const Float3 &translation ) +{ + this->head.Move( translation - this->body.translation ); + this->body.translation = translation; +} + +void Camera_FPSV2::SetAngular( const Float3 &axis ) +{ + this->body.rotation = Rotation( axis ); + this->head.SetRotation( this->body.rotation ); + this->pitchUp = 0.0f; +} + +void Camera_FPSV2::SetProjection( const Float4x4 &matrix ) +{ + this->head.SetProjection( matrix ); +} + +void Camera_FPSV2::SetOrthographicProjection( Float width, Float height, Float nearClip, Float farClip ) +{ + this->head.SetOrthographicProjection( width, height, nearClip, farClip ); +} + +void Camera_FPSV2::SetPerspectiveProjection( Float verticalFoV, Float aspectRatio, Float nearClip, Float farClip ) +{ + this->head.SetPerspectiveProjection( verticalFoV, aspectRatio, nearClip, farClip ); +} + +void Camera_FPSV2::UpdateOrientation() +{ + Float4x4 orientation; + OrientationMatrix( this->body.rotation, this->body.translation, orientation ); + + this->head.SetPosition( (orientation * Float4(this->headOffset, 1.0f)).xyz ); +} + +void Camera_FPSV2::SnapUpToNormal( const Float3 &normal ) +{ + this->body.rotation = Rotation( SnapAngularAxis(AngularAxis(this->body.rotation), WorldAxisOf(this->body.rotation, Float3::standard_unit_y), normal) ); + this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp * Float3::standard_unit_x) ); +} + +void Camera_FPSV2::Move( const Float3 &deltaPosition ) +{ + this->head.Move( deltaPosition ); + this->body.translation += deltaPosition; +} + +void Camera_FPSV2::Rotate( const Quaternion &deltaRotation ) +{ + this->head.Rotate( deltaRotation ); + this->body.rotation *= deltaRotation; +} + +void Camera_FPSV2::Rotate( const Float3 &deltaAngularAxis ) +{ + this->Rotate( Rotation(deltaAngularAxis) ); +} + +void Camera_FPSV2::MoveForward( Float distance ) +{ + this->MoveBackward( -distance ); +} + +void Camera_FPSV2::MoveBackward( Float distance ) +{ + this->Move( distance * WorldAxisOf(this->body.rotation, Float3::standard_unit_z) ); +} + +void Camera_FPSV2::StrafeRight( Float distance ) +{ + this->Move( distance * WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ); +} + +void Camera_FPSV2::StrafeLeft( Float distance ) +{ + this->StrafeRight( -distance ); +} + +void Camera_FPSV2::PitchUp( Float radian ) +{ + this->pitchUp = Clamp( this->pitchUp + radian, -0.48f * pi, 0.48f * pi ); + this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, Float3::standard_unit_x) ); +} + +void Camera_FPSV2::PitchDown( Float radian ) +{ + this->PitchUp( -radian ); +} + +void Camera_FPSV2::YawRight( Float radian ) +{ + this->YawLeft( -radian ); +} + +void Camera_FPSV2::YawLeft( Float radian ) +{ + Quaternion deltaRotation = Rotation( radian, WorldAxisOf(this->body.rotation, Float3::standard_unit_y) ); + this->Rotate( deltaRotation ); +} + +const Float3 & Camera_FPSV2::GetHeadOffset() const +{ + return this->headOffset; +} + +const Float3 & Camera_FPSV2::GetPosition() const +{ + return this->body.translation; +} + +Float4x4 & Camera_FPSV2::GetViewMatrix( Float4x4 &targetMem ) const +{ + return this->head.GetViewMatrix( targetMem ); +} + +const Float4x4 & Camera_FPSV2::GetProjectionMatrix() const +{ + return this->head.GetProjectionMatrix(); +} + +Float4x4 & Camera_FPSV2::GetViewsProjMatrix( Float4x4 &targetMem ) const +{ + return this->head.GetViewsProjMatrix( targetMem ); +} + +Float3 Camera_FPSV2::GetNormalOf( const Float3 &axis ) const +{ + return this->head.GetNormalOf( axis ); +} + +Float3 Camera_FPSV2::GetRight() const +{ + return WorldAxisOf( this->body.rotation, Float3::standard_unit_x ); +} + +Float3 Camera_FPSV2::GetUp() const +{ + return WorldAxisOf( this->body.rotation, Float3::standard_unit_y ); +} + +Float3 Camera_FPSV2::GetLook() const +{ + return this->head.GetNormalOf( -Float3::standard_unit_z ); +} + +Float3 Camera_FPSV2::GetForward() const +{ + return WorldAxisOf( this->body.rotation, -Float3::standard_unit_z ); +} \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/Camera_FPSV2.h b/Code/Game/GameClient/GameClientState/Camera_FPSV2.h new file mode 100644 index 00000000..968053c7 --- /dev/null +++ b/Code/Game/GameClient/GameClientState/Camera_FPSV2.h @@ -0,0 +1,62 @@ +#ifndef CAMERA_FPSV2_H +#define CAMERA_FPSV2_H + +#include "OysterMath.h" +#include "Camera_BasicV2.h" + +class Camera_FPSV2 +{ +public: + Camera_FPSV2(); + virtual ~Camera_FPSV2(); + + Camera_FPSV2 & operator = ( const Camera_FPSV2 &camera ); + + void SetHeadOffset( const ::Oyster::Math::Float3 &translation ); + void SetPosition( const ::Oyster::Math::Float3 &translation ); + void SetAngular( const ::Oyster::Math::Float3 &axis ); + void SetProjection( const ::Oyster::Math::Float4x4 &matrix ); + void SetOrthographicProjection( ::Oyster::Math::Float width, ::Oyster::Math::Float height, ::Oyster::Math::Float nearClip, ::Oyster::Math::Float farClip ); + void SetPerspectiveProjection( ::Oyster::Math::Float verticalFoV, ::Oyster::Math::Float aspectRatio, ::Oyster::Math::Float nearClip, ::Oyster::Math::Float farClip ); + + void UpdateOrientation(); + + void SnapUpToNormal( const ::Oyster::Math::Float3 &normal ); + + void Move( const ::Oyster::Math::Float3 &deltaPosition ); + void Rotate( const ::Oyster::Math::Quaternion &deltaRotation ); + void Rotate( const ::Oyster::Math::Float3 &deltaAngularAxis ); + + void MoveForward( ::Oyster::Math::Float distance ); + void MoveBackward( ::Oyster::Math::Float distance ); + void StrafeRight( ::Oyster::Math::Float distance ); + void StrafeLeft( ::Oyster::Math::Float distance ); + + void PitchUp( ::Oyster::Math::Float radian ); + void PitchDown( ::Oyster::Math::Float radian ); + void YawRight( ::Oyster::Math::Float radian ); + void YawLeft( ::Oyster::Math::Float radian ); + + const ::Oyster::Math::Float3 & GetHeadOffset() const; + const ::Oyster::Math::Float3 & GetPosition() const; + ::Oyster::Math::Float4x4 & GetViewMatrix( Oyster::Math::Float4x4 &targetMem = ::Oyster::Math::Float4x4() ) const; + const ::Oyster::Math::Float4x4 & GetProjectionMatrix() const; + ::Oyster::Math::Float4x4 & GetViewsProjMatrix( Oyster::Math::Float4x4 &targetMem = ::Oyster::Math::Float4x4() ) const; + ::Oyster::Math::Float3 GetNormalOf( const ::Oyster::Math::Float3 &axis ) const; + ::Oyster::Math::Float3 GetRight() const; + ::Oyster::Math::Float3 GetUp() const; + ::Oyster::Math::Float3 GetLook() const; + ::Oyster::Math::Float3 GetForward() const; + +private: + Camera_BasicV2 head; + ::Oyster::Math::Float pitchUp; + ::Oyster::Math::Float3 headOffset; + struct + { + ::Oyster::Math::Float3 translation; + ::Oyster::Math::Quaternion rotation; + } body; +}; + +#endif \ No newline at end of file diff --git a/Code/Misc/OysterMath/Quaternion.h b/Code/Misc/OysterMath/Quaternion.h index da790f75..f5ea5951 100644 --- a/Code/Misc/OysterMath/Quaternion.h +++ b/Code/Misc/OysterMath/Quaternion.h @@ -36,6 +36,7 @@ namespace LinearAlgebra const ScalarType & operator [] ( int i ) const; Quaternion & operator = ( const Quaternion &quaternion ); + Quaternion & operator *= ( const Quaternion &quaternion ); Quaternion & operator *= ( const ScalarType &scalar ); Quaternion & operator /= ( const ScalarType &scalar ); Quaternion & operator += ( const Quaternion &quaternion ); @@ -112,6 +113,12 @@ namespace LinearAlgebra return *this; } + template + Quaternion & Quaternion::operator *= ( const Quaternion &quaternion ) + { + return *this = *this * quaternion; + } + template Quaternion & Quaternion::operator *= ( const ScalarType &scalar ) { From 500ac117a7429e64e17a7335c250daa3d7f936f2 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 12:59:51 +0100 Subject: [PATCH 18/36] removed debug lines --- Code/Game/GameClient/GameClientState/GameState.cpp | 8 ++------ Code/Game/GameClient/GameClientState/NetLoadState.cpp | 5 +---- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 910afeb9..7118191e 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -85,11 +85,7 @@ bool GameState::Init( SharedStateContent &shared ) Graphics::API::SetProjection( this->privData->camera.GetProjectionMatrix() ); //tell server ready - //this->privData->nwClient->Send( Protocol_General_Status(Protocol_General_Status::States_ready) ); - - // Debugg hack - this->InitiatePlayer( 0, "crate_generic.dan",Float3( 0,132, 10), Quaternion::identity, Float3(1), true ); - // end debug hack + this->privData->nwClient->Send( Protocol_General_Status(Protocol_General_Status::States_ready) ); return true; } @@ -111,7 +107,7 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa this->privData->myId = id; this->privData->camera.SetPosition( this->privData->player.getPos() ); Float3 offset = Float3( 0.0f ); - offset.y = this->privData->player.getScale().y + 0.5f; // debug hack +0.5f + offset.y = this->privData->player.getScale().y * 0.9f; this->privData->camera.SetHeadOffset( offset ); this->privData->camera.UpdateOrientation(); } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 7443344e..f50db40c 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -54,11 +54,8 @@ bool NetLoadState::Init( SharedStateContent &shared ) // we may assume that nwClient is properly connected to the server // signals querry to server for loading instructions - //this->privData->nwClient->Send( Protocol_QuerryGameType() ); + this->privData->nwClient->Send( Protocol_QuerryGameType() ); - // debugg - this->LoadGame( "..//Content//Worlds//2ofAll_updated.bias"); - this->ChangeState( ClientState_Game ); return true; } From e00ddb30c9a606d3e9ab81c46947b942709cb79a Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 18 Feb 2014 13:12:08 +0100 Subject: [PATCH 19/36] Fixed server-client communication --- Code/Game/GameClient/GameClient.vcxproj.user | 2 +- Code/Game/GameServer/GameLobby.h | 7 +- Code/Game/GameServer/GameServerAPI.h | 7 +- Code/Game/GameServer/GameSession.h | 4 +- .../GameServer/Implementation/GameLobby.cpp | 55 ++-- .../GameServer/Implementation/GameServer.cpp | 11 +- .../Implementation/GameSession_General.cpp | 18 +- .../StandaloneGameServerCLI.cpp | 13 +- .../StandaloneGameServerCLI.h | 3 +- .../StandAloneLauncher/Form1.Designer.cs | 271 ++++++++++-------- .../LanServer/StandAloneLauncher/Form1.cs | 13 +- 11 files changed, 234 insertions(+), 170 deletions(-) diff --git a/Code/Game/GameClient/GameClient.vcxproj.user b/Code/Game/GameClient/GameClient.vcxproj.user index 4b847ee6..2e28d6f7 100644 --- a/Code/Game/GameClient/GameClient.vcxproj.user +++ b/Code/Game/GameClient/GameClient.vcxproj.user @@ -1,7 +1,7 @@  - false + true $(OutDir) diff --git a/Code/Game/GameServer/GameLobby.h b/Code/Game/GameServer/GameLobby.h index 9281dcd6..7b9a46d7 100644 --- a/Code/Game/GameServer/GameLobby.h +++ b/Code/Game/GameServer/GameLobby.h @@ -38,7 +38,12 @@ namespace DanBias void SetGameDesc(const LobbyLevelData& desc); void GetGameDesc(LobbyLevelData& desc); - bool StartGameSession(); + /** + * If param is true, the server will start a game session regardless of clients connected. + */ + bool StartGameSession( bool forceStart ); + + int GetGameSessionClientCount(); private: void ParseProtocol(Oyster::Network::CustomNetProtocol& p, Oyster::Network::NetworkClient* c); diff --git a/Code/Game/GameServer/GameServerAPI.h b/Code/Game/GameServer/GameServerAPI.h index eb5316c4..0a5a8a88 100644 --- a/Code/Game/GameServer/GameServerAPI.h +++ b/Code/Game/GameServer/GameServerAPI.h @@ -66,8 +66,13 @@ namespace DanBias static const wchar_t* GameGetGameMode(); static const wchar_t* GameGetGameName(); static const wchar_t* GameGetMapName(); + static int GetConnectedClientCount(); - static bool GameStart(); + /* Starts a game + * @param forceStart If forceStart is true, server will start with or without clients. + * If there are clients not "ready" the will be stareted anyways. + */ + static bool GameStart(bool forceStart); };//End class DanBiasServer diff --git a/Code/Game/GameServer/GameSession.h b/Code/Game/GameServer/GameSession.h index e6c8a4f9..28e8bde3 100644 --- a/Code/Game/GameServer/GameSession.h +++ b/Code/Game/GameServer/GameSession.h @@ -44,7 +44,7 @@ namespace DanBias virtual~GameSession(); /** Initiates and creates a game session. */ - bool Create(GameDescription& desc); + bool Create(GameDescription& desc, bool forceStart); /** Runs the game session (ie starts the game loop). */ void Run(); @@ -58,7 +58,7 @@ namespace DanBias inline bool IsCreated() const { return this->isCreated; } inline bool IsRunning() const { return this->isRunning; } - operator bool() { return (this->isCreated && this->isRunning); } + operator bool() { return (this->isCreated && this->isRunning); } //Private member functions private: diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index f2467750..b95402e2 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -65,40 +65,47 @@ void GameLobby::GetGameDesc(LobbyLevelData& desc) desc.gameMode = this->description.gameMode; } -bool GameLobby::StartGameSession( ) +bool GameLobby::StartGameSession( bool forceStart ) { -//Check if all clients is ready - if(this->GetClientCount() && this->GetClientCount() == this->readyList.Size()) +//Check if all clients is ready, in not force start + if(!forceStart) { - GameSession::GameDescription desc; - desc.maxClients = this->description.maxClients; - desc.gameMode = this->description.gameMode; - desc.gameTimeMinutes = this->description.gameTimeInMinutes; - //desc.mapName = this->description.mapNumber; - desc.owner = this; - desc.clients = this->gClients; + if(!this->GetClientCount()) + { /*None connected*/ return false;} + else if( this->GetClientCount() != this->readyList.Size() ) + { /*Not enough connected*/ return false; } + } - if(desc.gameTimeMinutes == 0) - desc.gameTimeMinutes = 10; //note: should be fetched from somewhere. + GameSession::GameDescription desc; + desc.maxClients = this->description.maxClients; + desc.gameMode = this->description.gameMode; + desc.gameTimeMinutes = this->description.gameTimeInMinutes; + desc.mapName = this->description.mapName; + desc.owner = this; + desc.clients = this->gClients; - if(desc.maxClients == 0) - desc.maxClients = 10; //note: should be fetched somewhere else.. + if(desc.gameTimeMinutes == 0) + desc.gameTimeMinutes = 10; //note: should be fetched from somewhere. - this->gClients.Clear(); //Remove clients from lobby list + if(desc.maxClients == 0) + desc.maxClients = 10; //note: should be fetched somewhere else.. + + this->gClients.Clear(); //Remove clients from lobby list - if(this->gameSession.Create(desc)) - { - this->gameSession.Run(); - - return true; - } - } - else + if(this->gameSession.Create(desc, forceStart)) { - //? + this->gameSession.Run(); + + return true; } + + return false; } +int GameLobby::GetGameSessionClientCount() +{ + return this->gameSession.GetClientCount(); +} void GameLobby::ClientEventCallback(NetEvent e) { diff --git a/Code/Game/GameServer/Implementation/GameServer.cpp b/Code/Game/GameServer/Implementation/GameServer.cpp index 8fbf2111..f003fc50 100644 --- a/Code/Game/GameServer/Implementation/GameServer.cpp +++ b/Code/Game/GameServer/Implementation/GameServer.cpp @@ -184,12 +184,15 @@ const wchar_t* GameServerAPI::GameGetGameName() lobby.GetGameDesc(d); return d.gameName.c_str(); } - -bool GameServerAPI::GameStart() +int GameServerAPI::GetConnectedClientCount() { - if(lobby.StartGameSession()) + return lobby.GetGameSessionClientCount(); +} + +bool GameServerAPI::GameStart( bool forceStart ) +{ + if(lobby.StartGameSession( forceStart )) { - return true; } return false; diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index 43f088dd..07d2dcd4 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -54,13 +54,13 @@ GameSession::~GameSession() this->isRunning = false; } -bool GameSession::Create(GameDescription& desc) +bool GameSession::Create(GameDescription& desc, bool forceStart) { this->description = desc; /* Do some error checking */ - if(desc.clients.Size() == 0) return false; - if(!desc.owner) return false; - if(this->isCreated) return false; + if(!forceStart && desc.clients.Size() == 0) return false; + if(!desc.owner) return false; + if(this->isCreated) return false; /* standard initialization of some data */ this->gClients.Resize((unsigned int)desc.maxClients); @@ -125,12 +125,10 @@ void GameSession::Run() { if(this->isRunning) return; - if(this->clients.Size() > 0) - { - this->worker.Start(); - this->worker.SetPriority(OYSTER_THREAD_PRIORITY_1); - this->isRunning = true; - } + this->worker.Start(); + this->worker.SetPriority(OYSTER_THREAD_PRIORITY_1); + this->isRunning = true; + } void GameSession::ThreadEntry( ) diff --git a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp index 0c913a56..1065a28a 100644 --- a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp +++ b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.cpp @@ -120,7 +120,14 @@ String^ StandaloneGameServerCLI::GameGetGameName() return gcnew String( DanBias::GameServerAPI::GameGetGameName()); } -bool StandaloneGameServerCLI::GameStart() +bool StandaloneGameServerCLI::GameStart(bool f) { - return DanBias::GameServerAPI::GameStart(); -} \ No newline at end of file + return DanBias::GameServerAPI::GameStart(f); +} +int StandaloneGameServerCLI::GetClientsConnectedCount() +{ + return DanBias::GameServerAPI::GetConnectedClientCount(); +} + + + diff --git a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h index d71a23b8..576a7433 100644 --- a/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h +++ b/Code/Game/LanServer/CLIStandaloneServer/StandaloneGameServerCLI.h @@ -57,7 +57,8 @@ namespace System { namespace Windows { namespace Interop System::String^ GameGetMapName(); System::String^ GameGetGameMode(); System::String^ GameGetGameName(); - bool GameStart(); + bool GameStart( bool forceStart ); + int GetClientsConnectedCount(); }; } } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs index df569295..103a047f 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs @@ -36,30 +36,32 @@ this.label_listenPort = new System.Windows.Forms.Label(); this.panel_serverOptions = new System.Windows.Forms.Panel(); this.panel_commands = new System.Windows.Forms.Panel(); + this.mapName = new System.Windows.Forms.TextBox(); + this.timeLimit = new System.Windows.Forms.NumericUpDown(); + this.gameModes = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.forceStart = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.nrOfClients = new System.Windows.Forms.NumericUpDown(); + this.buttonStartGame = new System.Windows.Forms.Button(); this.panel_clientArea = new System.Windows.Forms.Panel(); this.ServerInfoTextArea = new System.Windows.Forms.RichTextBox(); this.splitter1 = new System.Windows.Forms.Splitter(); this.clientInfoBox = new System.Windows.Forms.ListBox(); - this.buttonStartGame = new System.Windows.Forms.Button(); - this.nrOfClients = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.gameModes = new System.Windows.Forms.ComboBox(); - this.timeLimit = new System.Windows.Forms.NumericUpDown(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.mapName = new System.Windows.Forms.TextBox(); + this.labelClientsConnected = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).BeginInit(); this.panel_serverOptions.SuspendLayout(); this.panel_commands.SuspendLayout(); - this.panel_clientArea.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.timeLimit)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).BeginInit(); + this.panel_clientArea.SuspendLayout(); this.SuspendLayout(); // // serverToggle // - this.serverToggle.Location = new System.Drawing.Point(9, 81); + this.serverToggle.Location = new System.Drawing.Point(9, 106); this.serverToggle.Name = "serverToggle"; this.serverToggle.Size = new System.Drawing.Size(75, 23); this.serverToggle.TabIndex = 0; @@ -111,7 +113,7 @@ this.listenPort.Size = new System.Drawing.Size(95, 20); this.listenPort.TabIndex = 5; this.listenPort.Value = new decimal(new int[] { - 2048, + 15151, 0, 0, 0}); @@ -135,7 +137,7 @@ this.panel_serverOptions.Controls.Add(this.label_serverName); this.panel_serverOptions.Location = new System.Drawing.Point(12, 12); this.panel_serverOptions.Name = "panel_serverOptions"; - this.panel_serverOptions.Size = new System.Drawing.Size(183, 113); + this.panel_serverOptions.Size = new System.Drawing.Size(183, 141); this.panel_serverOptions.TabIndex = 6; // // panel_commands @@ -144,17 +146,137 @@ this.panel_commands.Controls.Add(this.timeLimit); this.panel_commands.Controls.Add(this.gameModes); this.panel_commands.Controls.Add(this.label3); + this.panel_commands.Controls.Add(this.forceStart); this.panel_commands.Controls.Add(this.label2); this.panel_commands.Controls.Add(this.label4); + this.panel_commands.Controls.Add(this.labelClientsConnected); this.panel_commands.Controls.Add(this.label1); this.panel_commands.Controls.Add(this.nrOfClients); this.panel_commands.Controls.Add(this.buttonStartGame); - this.panel_commands.Location = new System.Drawing.Point(12, 131); + this.panel_commands.Location = new System.Drawing.Point(12, 159); this.panel_commands.Name = "panel_commands"; - this.panel_commands.Size = new System.Drawing.Size(183, 230); + this.panel_commands.Size = new System.Drawing.Size(183, 202); this.panel_commands.TabIndex = 7; this.panel_commands.Visible = false; // + // mapName + // + this.mapName.Location = new System.Drawing.Point(78, 7); + this.mapName.Name = "mapName"; + this.mapName.Size = new System.Drawing.Size(98, 20); + this.mapName.TabIndex = 12; + this.mapName.Text = "Unknown"; + // + // timeLimit + // + this.timeLimit.Location = new System.Drawing.Point(109, 94); + this.timeLimit.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.timeLimit.Name = "timeLimit"; + this.timeLimit.Size = new System.Drawing.Size(68, 20); + this.timeLimit.TabIndex = 11; + this.timeLimit.ThousandsSeparator = true; + this.timeLimit.Value = new decimal(new int[] { + 15, + 0, + 0, + 0}); + // + // gameModes + // + this.gameModes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gameModes.FormattingEnabled = true; + this.gameModes.Items.AddRange(new object[] { + "Free-for-all", + "Team death-match"}); + this.gameModes.Location = new System.Drawing.Point(78, 66); + this.gameModes.Name = "gameModes"; + this.gameModes.Size = new System.Drawing.Size(99, 21); + this.gameModes.TabIndex = 10; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 96); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(95, 13); + this.label3.TabIndex = 9; + this.label3.Text = "Time limit (minutes)"; + // + // forceStart + // + this.forceStart.AutoSize = true; + this.forceStart.Checked = true; + this.forceStart.CheckState = System.Windows.Forms.CheckState.Checked; + this.forceStart.Location = new System.Drawing.Point(12, 120); + this.forceStart.Name = "forceStart"; + this.forceStart.Size = new System.Drawing.Size(115, 17); + this.forceStart.TabIndex = 1; + this.forceStart.Text = "Ignore empty lobby"; + this.forceStart.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 69); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(64, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Game mode"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(9, 15); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(57, 13); + this.label4.TabIndex = 8; + this.label4.Text = "Map name"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 38); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 13); + this.label1.TabIndex = 8; + this.label1.Text = "Client limit"; + // + // nrOfClients + // + this.nrOfClients.Location = new System.Drawing.Point(78, 36); + this.nrOfClients.Maximum = new decimal(new int[] { + 20, + 0, + 0, + 0}); + this.nrOfClients.Minimum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.nrOfClients.Name = "nrOfClients"; + this.nrOfClients.Size = new System.Drawing.Size(39, 20); + this.nrOfClients.TabIndex = 7; + this.nrOfClients.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + // + // buttonStartGame + // + this.buttonStartGame.Location = new System.Drawing.Point(9, 176); + this.buttonStartGame.Name = "buttonStartGame"; + this.buttonStartGame.Size = new System.Drawing.Size(75, 23); + this.buttonStartGame.TabIndex = 6; + this.buttonStartGame.Text = "Start game"; + this.buttonStartGame.UseVisualStyleBackColor = true; + this.buttonStartGame.Click += new System.EventHandler(this.buttonStartGame_Click); + // // panel_clientArea // this.panel_clientArea.Controls.Add(this.ServerInfoTextArea); @@ -197,110 +319,14 @@ this.clientInfoBox.Size = new System.Drawing.Size(303, 147); this.clientInfoBox.TabIndex = 0; // - // buttonStartGame + // labelClientsConnected // - this.buttonStartGame.Location = new System.Drawing.Point(53, 195); - this.buttonStartGame.Name = "buttonStartGame"; - this.buttonStartGame.Size = new System.Drawing.Size(75, 23); - this.buttonStartGame.TabIndex = 6; - this.buttonStartGame.Text = "Start game"; - this.buttonStartGame.UseVisualStyleBackColor = true; - this.buttonStartGame.Click += new System.EventHandler(this.buttonStartGame_Click); - // - // nrOfClients - // - this.nrOfClients.Location = new System.Drawing.Point(78, 36); - this.nrOfClients.Maximum = new decimal(new int[] { - 20, - 0, - 0, - 0}); - this.nrOfClients.Minimum = new decimal(new int[] { - 2, - 0, - 0, - 0}); - this.nrOfClients.Name = "nrOfClients"; - this.nrOfClients.Size = new System.Drawing.Size(39, 20); - this.nrOfClients.TabIndex = 7; - this.nrOfClients.Value = new decimal(new int[] { - 2, - 0, - 0, - 0}); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 38); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(53, 13); - this.label1.TabIndex = 8; - this.label1.Text = "Client limit"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 69); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(64, 13); - this.label2.TabIndex = 9; - this.label2.Text = "Game mode"; - // - // gameModes - // - this.gameModes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gameModes.FormattingEnabled = true; - this.gameModes.Items.AddRange(new object[] { - "Free-for-all", - "Team death-match"}); - this.gameModes.Location = new System.Drawing.Point(78, 66); - this.gameModes.Name = "gameModes"; - this.gameModes.Size = new System.Drawing.Size(99, 21); - this.gameModes.TabIndex = 10; - // - // timeLimit - // - this.timeLimit.Location = new System.Drawing.Point(109, 94); - this.timeLimit.Minimum = new decimal(new int[] { - 5, - 0, - 0, - 0}); - this.timeLimit.Name = "timeLimit"; - this.timeLimit.Size = new System.Drawing.Size(68, 20); - this.timeLimit.TabIndex = 11; - this.timeLimit.ThousandsSeparator = true; - this.timeLimit.Value = new decimal(new int[] { - 5, - 0, - 0, - 0}); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 96); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(95, 13); - this.label3.TabIndex = 9; - this.label3.Text = "Time limit (minutes)"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(9, 15); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(57, 13); - this.label4.TabIndex = 8; - this.label4.Text = "Map name"; - // - // mapName - // - this.mapName.Location = new System.Drawing.Point(78, 7); - this.mapName.Name = "mapName"; - this.mapName.Size = new System.Drawing.Size(98, 20); - this.mapName.TabIndex = 12; + this.labelClientsConnected.AutoSize = true; + this.labelClientsConnected.Location = new System.Drawing.Point(9, 149); + this.labelClientsConnected.Name = "labelClientsConnected"; + this.labelClientsConnected.Size = new System.Drawing.Size(104, 13); + this.labelClientsConnected.TabIndex = 8; + this.labelClientsConnected.Text = "Clients connected: 0"; // // Form1 // @@ -312,14 +338,15 @@ this.Controls.Add(this.panel_serverOptions); this.Name = "Form1"; this.Text = "Form1"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClosingEvent); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).EndInit(); this.panel_serverOptions.ResumeLayout(false); this.panel_serverOptions.PerformLayout(); this.panel_commands.ResumeLayout(false); this.panel_commands.PerformLayout(); - this.panel_clientArea.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.timeLimit)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).EndInit(); + this.panel_clientArea.ResumeLayout(false); this.ResumeLayout(false); } @@ -347,6 +374,8 @@ private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox mapName; + private System.Windows.Forms.CheckBox forceStart; + private System.Windows.Forms.Label labelClientsConnected; } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.cs index 1240c333..28a83c72 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.cs @@ -20,7 +20,7 @@ namespace StandAloneLauncher public Form1() { InitializeComponent(); - + this.gameModes.SelectedIndex = 0; } @@ -38,6 +38,7 @@ namespace StandAloneLauncher //Do some stuff this.gameServer.ServerUpdate(); + this.labelClientsConnected.Text = "Clients connected: " + this.gameServer.GetClientsConnectedCount().ToString(); } } @@ -89,7 +90,7 @@ namespace StandAloneLauncher this.gameServer.GameSetGameTime((int)this.timeLimit.Value); //this.gameServer.GameSetMapId(0); this.gameServer.GameSetMaxClients((int)this.nrOfClients.Value); - if (!this.gameServer.GameStart()) + if (!this.gameServer.GameStart( this.forceStart.Checked )) { this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to start the game session!\n"); } @@ -98,5 +99,13 @@ namespace StandAloneLauncher this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Game session started!\n"); } } + + private void FormClosingEvent(object sender, FormClosingEventArgs e) + { + if (serverIsRunning) + { + this.gameServer.ServerStop(); + } + } } } From 3f4038a12daebcc5bcd060b7404de17311a1528f Mon Sep 17 00:00:00 2001 From: lanariel Date: Tue, 18 Feb 2014 13:43:32 +0100 Subject: [PATCH 20/36] Backface change and enable render wireframe --- Code/OysterGraphics/DllInterfaces/GFXAPI.cpp | 1 + Code/OysterGraphics/Render/Resources.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index bdfa0bde..96e2bbe2 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -197,6 +197,7 @@ namespace Oyster void API::StartRenderWireFrame() { Core::deviceContext->RSSetState(wire); + Core::deviceContext->OMSetRenderTargets(Render::Resources::Gather::Pass.RTV.size(),&Render::Resources::Gather::Pass.RTV[0],NULL); } void API::RenderDebugCube(Math::Matrix world) diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp index 514960cf..124b1bf1 100644 --- a/Code/OysterGraphics/Render/Resources.cpp +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -338,8 +338,8 @@ namespace Oyster dTDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; dTDesc.CPUAccessFlags=0; dTDesc.MiscFlags=0; - dTDesc.Height = Core::resolution.y; - dTDesc.Width = Core::resolution.x; + dTDesc.Height = (UINT)Core::resolution.y; + dTDesc.Width = (UINT)Core::resolution.x; dTDesc.SampleDesc.Count=1; dTDesc.SampleDesc.Quality=0; From be8b7537b5e570569fc5a1e51b956e3b9e3b68e0 Mon Sep 17 00:00:00 2001 From: Erik Persson Date: Tue, 18 Feb 2014 13:47:40 +0100 Subject: [PATCH 21/36] GL - merging --- Code/Game/GameLogic/CollisionManager.cpp | 6 +++--- Code/Game/GameLogic/Game_LevelData.cpp | 4 +++- Code/Game/GameLogic/Game_PlayerData.cpp | 2 -- Code/Game/GameLogic/Level.cpp | 14 +++++++------- Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp | 2 +- Code/Game/GameLogic/Player.cpp | 4 ++-- .../GamePhysics/Implementation/SimpleRigidBody.cpp | 4 ++-- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index 0b817975..5d1a95ec 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -170,12 +170,12 @@ using namespace GameLogic; void PlayerVLethalObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss, Oyster::Math::Float ExtraDamage) { - int damageDone = 0; - int forceThreashHold = 200000; + Oyster::Math::Float damageDone = 0; + Oyster::Math::Float forceThreashHold = 200000; if(kineticEnergyLoss > forceThreashHold) //should only take damage if the force is high enough { - damageDone = (int)(kineticEnergyLoss * 0.10f); + damageDone = (kineticEnergyLoss * 0.10f); damageDone += ExtraDamage; //player.DamageLife(damageDone); } diff --git a/Code/Game/GameLogic/Game_LevelData.cpp b/Code/Game/GameLogic/Game_LevelData.cpp index 80220d5f..e82a3834 100644 --- a/Code/Game/GameLogic/Game_LevelData.cpp +++ b/Code/Game/GameLogic/Game_LevelData.cpp @@ -54,8 +54,10 @@ IObjectData* Game::LevelData::GetObjectAt(int ID) const void Game::LevelData::GetAllDynamicObjects(Utility::DynamicMemory::DynamicArray& mem) const { - for(int i = 0; i < level->dynamicObjects.Size(); i++) + + for(int i = 0; i < (int)level->dynamicObjects.Size(); i++) { mem[i] = level->dynamicObjects[i]; } + } \ No newline at end of file diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index 1b725b02..e7a77bbd 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -27,9 +27,7 @@ Game::PlayerData::PlayerData() } Game::PlayerData::PlayerData(int playerID,int teamID) { - Oyster::Physics::ICustomBody* rigidBody; this->player = new Player(); - } Game::PlayerData::~PlayerData() { diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 030f0eca..4d3cf703 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -63,9 +63,9 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) break; case ObjectSpecialType_RedExplosiveBox: { - int dmg = 50; + Oyster::Math::Float dmg = 50; Oyster::Math::Float force = 50; - int radie = 50; + Oyster::Math::Float radie = 50; gameObj = new ExplosiveCrate(rigidBody, (ObjectSpecialType)obj->specialTypeID, objID++, dmg, force, radie); } break; @@ -353,7 +353,7 @@ void Level::InitiateLevel(float radius) int offset = 0; for(int i =0; i< nrOfBoxex; i ++) { - rigidBody_TestBox = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 605 + i*5, 10), 5, 0.5f, 0.8f, 0.6f); + rigidBody_TestBox = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0.0f, 0.0f, 0.0f, 1.0f), Oyster::Math::Float3(0.0f, 605.0f + i*5.0f, 10.0f), 5.0f, 0.5f, 0.8f, 0.6f); this->dynamicObjects.Push(new DynamicObject(rigidBody_TestBox, Object::DefaultCollisionAfter, ObjectSpecialType_StandardBox, idCount++)); } @@ -385,16 +385,16 @@ void Level::InitiateLevel(float radius) }*/ // add crystal - ICustomBody* rigidBody_Crystal = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(10, 605, 0), 5, 0.5f, 0.8f, 0.6f); + ICustomBody* rigidBody_Crystal = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0.0f, 0.0f, 0.0f, 1.0f), Oyster::Math::Float3(10.0f, 605.0f, 0.0f), 5.0f, 0.5f, 0.8f, 0.6f); this->dynamicObjects.Push(new DynamicObject(rigidBody_Crystal, Object::DefaultCollisionAfter, ObjectSpecialType_StandardBox, idCount++)); // add house - ICustomBody* rigidBody_House =API::Instance().AddCollisionBox(Oyster::Math::Float3(20, 20, 20), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(-50, 590, 0), 0, 0.5f, 0.8f, 0.6f); + ICustomBody* rigidBody_House =API::Instance().AddCollisionBox(Oyster::Math::Float3(20.0f, 20.0f, 20.0f), Oyster::Math::Float4(0.0f, 0.0f, 0.0f, 1.0f), Oyster::Math::Float3(-50.0f, 590.0f, 0.0f), 0.0f, 0.5f, 0.8f, 0.6f); this->staticObjects.Push(new StaticObject(rigidBody_House, Object::DefaultCollisionAfter, ObjectSpecialType_Generic, idCount++)); // add jumppad - ICustomBody* rigidBody_Jumppad = API::Instance().AddCollisionBox(Oyster::Math::Float3(1, 1, 1), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(4, 600.3, 0), 5, 0.5f, 0.8f, 0.6f); + ICustomBody* rigidBody_Jumppad = API::Instance().AddCollisionBox(Oyster::Math::Float3(1.0f, 1.0f, 1.0f), Oyster::Math::Float4(0.0f, 0.0f, 0.0f, 1.0f), Oyster::Math::Float3(4.0f, 600.3f, 0.0f), 5.0f, 0.5f, 0.8f, 0.6f); this->staticObjects.Push(new JumpPad(rigidBody_Jumppad, ObjectSpecialType_JumpPad,idCount++ ,Oyster::Math::Float3(0,2000,0))); } @@ -419,7 +419,7 @@ int Level::getNrOfDynamicObj() } Object* Level::GetObj( int ID) const { - for (int i = 0; i < this->dynamicObjects.Size(); i++) + for (int i = 0; i < (int)this->dynamicObjects.Size(); i++) { if(this->dynamicObjects[i]->GetID() == ID) return this->dynamicObjects[i]; diff --git a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp index 826a52be..dfee72a7 100644 --- a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp +++ b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp @@ -119,7 +119,7 @@ namespace GameLogic int temp; - for(int i = 0; i < tempSize; i++) + for(int i = 0; i < (int)tempSize; i++) { memcpy(&temp, &buffer[start], 4); start += 4; diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index 79f34245..80969b29 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -90,7 +90,7 @@ void Player::BeginFrame() forwardDir.Normalize(); rightDir.Normalize(); Oyster::Math::Float3 walkDirection = Oyster::Math::Float3(0.0, 0.0, 0.0); - Oyster::Math::Float walkSpeed = this->moveSpeed*0.2; + Oyster::Math::Float walkSpeed = this->moveSpeed*0.2f; if (key_forward > 0.001) { @@ -122,7 +122,7 @@ void Player::BeginFrame() if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 && this->rigidBody->GetLambda() < 0.7f) { /* Dampen when on the ground and not being moved by the player */ - linearVelocity *= 0.2; + linearVelocity *= 0.2f; this->rigidBody->SetLinearVelocity (linearVelocity); } else diff --git a/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp index f7cf6cce..4cdb282d 100644 --- a/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/Physics/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -300,11 +300,11 @@ Float4x4 SimpleRigidBody::GetView( const ::Oyster::Math::Float3 &offset ) const Float3 SimpleRigidBody::GetGravity() const { - return this->rigidBody->getGravity(); + return (Float3)this->rigidBody->getGravity(); } Float3 SimpleRigidBody::GetLinearVelocity() const { - return this->rigidBody->getLinearVelocity(); + return (Float3)this->rigidBody->getLinearVelocity(); } From e72f2224be66a3c9fa02193107c23b1afdb568be Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Tue, 18 Feb 2014 14:09:18 +0100 Subject: [PATCH 22/36] Removed Misc\Misc from additionalDependencies. --- Code/Game/GameClient/GameClient.vcxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Code/Game/GameClient/GameClient.vcxproj b/Code/Game/GameClient/GameClient.vcxproj index 0691fef1..8e2cfe69 100644 --- a/Code/Game/GameClient/GameClient.vcxproj +++ b/Code/Game/GameClient/GameClient.vcxproj @@ -111,7 +111,7 @@ Windows true - Misc\Misc_$(PlatformShortName)D.lib;WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) + WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -128,7 +128,7 @@ Windows true - Misc\Misc_$(PlatformShortName)D.lib;WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) + WindowManager\WindowManager_$(PlatformShortName)D.lib;OysterGraphics_$(PlatformShortName)D.lib;Input\Input_$(PlatformShortName)D.lib;%(AdditionalDependencies) NetworkAPI_$(PlatformShortName)D.dll;OysterGraphics_$(PlatformShortName)D.dll;%(DelayLoadDLLs) @@ -149,7 +149,7 @@ true true true - Misc\Misc_$(PlatformShortName).lib;WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) + WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) @@ -170,7 +170,7 @@ true true true - Misc\Misc_$(PlatformShortName).lib;WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) + WindowManager\WindowManager_$(PlatformShortName).lib;OysterGraphics_$(PlatformShortName).lib;Input\Input_$(PlatformShortName).lib;%(AdditionalDependencies) NetworkAPI_$(PlatformShortName).dll;OysterGraphics_$(PlatformShortName).dll;%(DelayLoadDLLs) From 86ef521abd7422d435fea25e290e20869af8f833 Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Tue, 18 Feb 2014 14:10:12 +0100 Subject: [PATCH 23/36] LevelLoader - Added new CollisionGeometry_TriangleMesh. --- Code/Game/GameLogic/LevelLoader/ObjectDefines.h | 16 ++++++++++++++++ .../GameLogic/LevelLoader/ParseFunctions.cpp | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h b/Code/Game/GameLogic/LevelLoader/ObjectDefines.h index 01d17c3e..131b2938 100644 --- a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h +++ b/Code/Game/GameLogic/LevelLoader/ObjectDefines.h @@ -52,6 +52,7 @@ namespace GameLogic CollisionGeometryType_Box, CollisionGeometryType_Sphere, CollisionGeometryType_Cylinder, + CollisionGeometryType_TriangleMesh, CollisionGeometryType_Count, CollisionGeometryType_Unknown = -1 @@ -161,6 +162,12 @@ namespace GameLogic float radius; }; + struct BoundingVolumeTriangleMesh : public BoundingVolumeBase + { + //Null terminated + wchar_t* filename; + }; + struct BoundingVolume { CollisionGeometryType geoType; @@ -169,7 +176,16 @@ namespace GameLogic LevelLoaderInternal::BoundingVolumeBox box; LevelLoaderInternal::BoundingVolumeSphere sphere; LevelLoaderInternal::BoundingVolumeCylinder cylinder; + LevelLoaderInternal::BoundingVolumeTriangleMesh triangleMesh; }; + + virtual ~BoundingVolume() + { + if(geoType == CollisionGeometryType_TriangleMesh) + { + delete[] triangleMesh.filename; + } + } }; } diff --git a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp index dfee72a7..daa62752 100644 --- a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp +++ b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp @@ -175,6 +175,17 @@ namespace GameLogic start += sizeof(volume.cylinder); break; + case CollisionGeometryType_TriangleMesh: + //Get string size + memcpy(&tempSize, &buf[start], sizeof(tempSize)); + start += sizeof(tempSize); + + //Get actual string + volume.triangleMesh.filename = new wchar_t[tempSize+1]; + memcpy(volume.triangleMesh.filename, &buf[start], tempSize); + volume.triangleMesh.filename[tempSize] = '\0'; + break; + default: break; } From 3218e7b8470481ed2bb3605b6eda19c8fb0c70df Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 15:08:47 +0100 Subject: [PATCH 24/36] Connect to Dennis --- Code/Game/GameClient/GameClientState/LanMenuState.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 6d3d991b..11ca95da 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -60,7 +60,8 @@ bool LanMenuState::Init( SharedStateContent &shared ) // create guiElements this->privData->connectIP = new TextField( L"color_white.png", Float4(1.0f), Float4(0.0f), this, Float3(0.5f, 0.3f, 0.5f), Float2(0.8f, 0.09f), ResizeAspectRatio_None ); this->privData->connectIP->ReserveLines( 1 ); - this->privData->connectIP->AppendText( L"127.0.0.1" ); + //this->privData->connectIP->AppendText( L"127.0.0.1" ); + this->privData->connectIP->AppendText( L"194.47.150.206" ); // HACK: connecting to Dennis's server this->privData->connectIP->SetFontHeight( 0.08f ); this->privData->connectIP->SetLineSpacing( 0.005f ); this->privData->connectIP->SetTopAligned(); From 996f66099054910769a7a2cbff25132055bbdd9a Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 15:09:01 +0100 Subject: [PATCH 25/36] Fixes and bugtraps --- Code/Game/GameClient/GameClientState/GameState.cpp | 10 +++++++--- Code/Game/GameClient/GameClientState/NetLoadState.cpp | 6 +++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 7118191e..3576ae65 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -146,7 +146,8 @@ bool GameState::Render() auto dynamicObject = this->privData->dynamicObjects->begin(); for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) { - dynamicObject->second->Render(); + if( dynamicObject->second ) + dynamicObject->second->Render(); } Oyster::Graphics::API::EndFrame(); @@ -366,8 +367,11 @@ void GameState::DataRecieved( NetEventprivData->dynamicObjects)[decoded.object_ID]; - object->setPos( position ); - object->setRot( rotation ); + if( object ) + { + object->setPos( position ); + object->setRot( rotation ); + } } break; case protocol_Gameplay_ObjectEnabled: break; /** @todo TODO: implement */ diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index d120cac2..9a88072c 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -101,13 +101,17 @@ void NetLoadState::DataRecieved( NetEventChangeState( ClientState_Game ); this->privData->loading = false; } + else + { // HACK: Debug trap + const char *breakPoint = "Being greedy."; + } } void NetLoadState::LoadGame( const ::std::string &fileName ) { this->privData->loading = true; - LevelLoader loader; + LevelLoader loader( "..\\Content\\Worlds\\" ); auto objects = loader.LoadLevel( fileName ); auto object = objects.begin(); ObjectTypeHeader *oth; From 22f9daf0d8d03c5ce74f92903abecdc7a0a7a890 Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 18 Feb 2014 16:38:08 +0100 Subject: [PATCH 26/36] Connection between server and client is stable --- Code/Game/GameLogic/Game_LevelData.cpp | 1 + Code/Game/GameServer/GameClient.h | 13 +++- Code/Game/GameServer/GameLobby.h | 3 + .../GameServer/Implementation/GameClient.cpp | 11 ++- .../GameServer/Implementation/GameLobby.cpp | 14 ++-- .../GameLobby_ProtocolParser.cpp | 71 +++++++++++++------ .../Implementation/GameSession_Gameplay.cpp | 4 +- .../Implementation/GameSession_General.cpp | 12 ++-- .../StandAloneLauncher/Form1.Designer.cs | 63 +++++++++------- .../LanServer/StandAloneLauncher/Form1.cs | 10 +-- .../Utilities/Resource/OResourceHandler.cpp | 2 + Code/Network/NetworkAPI/NetworkClient.cpp | 4 ++ 12 files changed, 141 insertions(+), 67 deletions(-) diff --git a/Code/Game/GameLogic/Game_LevelData.cpp b/Code/Game/GameLogic/Game_LevelData.cpp index 80220d5f..62fb3cc5 100644 --- a/Code/Game/GameLogic/Game_LevelData.cpp +++ b/Code/Game/GameLogic/Game_LevelData.cpp @@ -54,6 +54,7 @@ IObjectData* Game::LevelData::GetObjectAt(int ID) const void Game::LevelData::GetAllDynamicObjects(Utility::DynamicMemory::DynamicArray& mem) const { + mem.Resize(level->dynamicObjects.Size()); for(int i = 0; i < level->dynamicObjects.Size(); i++) { mem[i] = level->dynamicObjects[i]; diff --git a/Code/Game/GameServer/GameClient.h b/Code/Game/GameServer/GameClient.h index 422df933..6fcf6b05 100644 --- a/Code/Game/GameServer/GameClient.h +++ b/Code/Game/GameServer/GameClient.h @@ -17,6 +17,13 @@ namespace DanBias */ class GameClient { + public: + enum ClientState + { + ClientState_CreatingGame, + ClientState_Ready, + }; + public: GameClient(Utility::DynamicMemory::SmartPointer nwClient); virtual~GameClient(); @@ -33,6 +40,7 @@ namespace DanBias inline bool IsReady() const { return this->isReady; } inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } Oyster::Network::NetClient GetClient() const { return this->client; } + ClientState GetState() const { return this->state; } void SetPlayer(GameLogic::IPlayerData* player); @@ -40,6 +48,7 @@ namespace DanBias void SetAlias(std::wstring alias); void SetCharacter(std::wstring character); void SetSinceLastResponse(float seconds); + void SetState(ClientState state); GameLogic::IPlayerData* ReleasePlayer(); Oyster::Network::NetClient ReleaseClient(); @@ -50,13 +59,15 @@ namespace DanBias private: GameLogic::IPlayerData* player; - Utility::DynamicMemory::SmartPointer client; + Oyster::Network::NetClient client; bool isReady; float secondsSinceLastResponse; std::wstring alias; std::wstring character; + + ClientState state; }; }//End namespace DanBias diff --git a/Code/Game/GameServer/GameLobby.h b/Code/Game/GameServer/GameLobby.h index 7b9a46d7..f62baa63 100644 --- a/Code/Game/GameServer/GameLobby.h +++ b/Code/Game/GameServer/GameLobby.h @@ -58,6 +58,9 @@ namespace DanBias void LobbyReady(GameLogic::Protocol_LobbyClientReadyState& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_ClientReadyState: void LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyster::Network::NetworkClient* c); //id = protocol_Lobby_QuerryGameType: + private: + int FindClient(Oyster::Network::NetworkClient* c); + private: void ClientEventCallback(Oyster::Network::NetEvent e) override; void ClientConnectedEvent(Utility::DynamicMemory::SmartPointer client) override; diff --git a/Code/Game/GameServer/Implementation/GameClient.cpp b/Code/Game/GameServer/Implementation/GameClient.cpp index 7ef4a338..81066450 100644 --- a/Code/Game/GameServer/Implementation/GameClient.cpp +++ b/Code/Game/GameServer/Implementation/GameClient.cpp @@ -50,6 +50,10 @@ void GameClient::SetCharacter(std::wstring character) { this->character = character; } +void GameClient::SetState(ClientState state) +{ + this->state = state; +} void GameClient::SetOwner(Oyster::Network::NetworkSession* owner) @@ -58,7 +62,12 @@ void GameClient::SetOwner(Oyster::Network::NetworkSession* owner) } void GameClient::UpdateClient() { - this->client->Update(); + switch (this->state) + { + case ClientState_Ready: + this->client->Update(); + break; + } } diff --git a/Code/Game/GameServer/Implementation/GameLobby.cpp b/Code/Game/GameServer/Implementation/GameLobby.cpp index b95402e2..cadfa53a 100644 --- a/Code/Game/GameServer/Implementation/GameLobby.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby.cpp @@ -17,7 +17,7 @@ GameLobby::GameLobby() { } GameLobby::~GameLobby() { - this->clients.Clear(); + this->gClients.Clear(); } void GameLobby::Release() { @@ -26,11 +26,11 @@ void GameLobby::Release() } void GameLobby::Update() { - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]) + if(this->gClients[i]) { - this->clients[i]->Update(); + this->gClients[i]->GetClient()->Update(); } } } @@ -119,7 +119,7 @@ void GameLobby::ClientEventCallback(NetEventGetID(), e.sender->GetIpAddress().c_str()); - e.sender->Disconnect(); + //e.sender->Disconnect(); //this->readyList.Remove(e.sender); //this->gClients.Remove(e.sender); break; @@ -184,7 +184,9 @@ void GameLobby::ProcessClients() } bool GameLobby::Attach(Utility::DynamicMemory::SmartPointer client) { - if(this->clientCount = this->description.maxClients) return false; + if(this->clientCount == this->description.maxClients) return false; + + client->SetOwner(this); bool added = false; for (unsigned int i = 0; i < this->gClients.Size(); i++) diff --git a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp index ebcfb8bf..2c4f148a 100644 --- a/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp +++ b/Code/Game/GameServer/Implementation/GameLobby_ProtocolParser.cpp @@ -40,26 +40,46 @@ void GameLobby::GeneralStatus(GameLogic::Protocol_General_Status& p, Oyster::Net { case Protocol_General_Status::States_ready: { - + int temp = FindClient(c); + if(temp != -1 ) + { + switch (this->gClients[temp]->GetState()) + { + case GameClient::ClientState_CreatingGame: + { + this->gameSession.Join(this->gClients[temp]); + this->gClients[temp] = 0; + } + break; + } + } + else + { + c->Disconnect(); + } } + break; case Protocol_General_Status::States_idle: { } + break; case Protocol_General_Status::States_leave: + break; case Protocol_General_Status::States_disconected: { Detach(c)->Disconnect(); } + break; } } void GameLobby::GeneralText(GameLogic::Protocol_General_Text& p, Oyster::Network::NetworkClient* c) { - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->clients[i]) + if(this->gClients[i]) { - this->clients[i]->Send(p); + this->gClients[i]->GetClient()->Send(p); } } printf(p.text.c_str()); @@ -69,9 +89,9 @@ void GameLobby::LobbyStartGame(GameLogic::Protocol_LobbyStartGame& p, Oyster::Ne if(this->sessionOwner->GetClient()->GetID() == c->GetID()) { //Send countdown timer before lobby shuts down - for (unsigned int i = 0; i < this->clients.Size(); i++) + for (unsigned int i = 0; i < this->gClients.Size(); i++) { - this->clients[i]->Send(Protocol_LobbyStartGame(3.0f)); + this->gClients[i]->GetClient()->Send(Protocol_LobbyStartGame(3.0f)); } } else @@ -118,32 +138,41 @@ void GameLobby::LobbyQuerryGameData(GameLogic::Protocol_QuerryGameType& p, Oyste { if(this->gameSession) { - gClient temp; - bool found = false; - - //find client in waiting list - for (unsigned int i = 0; !found && i < this->clients.Size(); i++) - { - if(this->gClients[i]->GetClient()->GetID() == c->GetID()) - { - temp = this->gClients[i]; - found = true; - } - } + int temp = FindClient(c); //Something is wrong - if(!found) + if(temp == -1) { c->Disconnect(); } else { //Send game data - this->gameSession.Join(temp); + Protocol_LobbyCreateGame lcg((char)1, (char)0, Utility::String::WStringToString(this->description.mapName, std::string())); + c->Send(lcg); + this->gClients[temp]->SetState(GameClient::ClientState_CreatingGame); } } else { - + // Nothing.- } } + + +int GameLobby::FindClient(Oyster::Network::NetworkClient* c) +{ + int temp = -1; + + //find client in waiting list + for (unsigned int i = 0; i < this->gClients.Size(); i++) + { + if(this->gClients[i]->GetClient()->GetID() == c->GetID()) + { + temp = i; + break; + } + } + + return temp; +} \ No newline at end of file diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index 61ccf9c8..6a9c09c2 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -45,7 +45,7 @@ using namespace DanBias; //Find the idiot for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->gClients[i]->Equals(e.sender)) + if(this->gClients[i] && this->gClients[i]->Equals(e.sender)) { temp = i; } @@ -78,7 +78,7 @@ using namespace DanBias; { for (unsigned int i = 0; i < this->gClients.Size(); i++) { - if(this->gClients[i]) + if(this->gClients[i] ) { this->gClients[i]->UpdateClient(); } diff --git a/Code/Game/GameServer/Implementation/GameSession_General.cpp b/Code/Game/GameServer/Implementation/GameSession_General.cpp index 07d2dcd4..8b5bd8cb 100644 --- a/Code/Game/GameServer/Implementation/GameSession_General.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_General.cpp @@ -199,18 +199,12 @@ bool GameSession::Join(gClient gameClient) gameClient->SetPlayer(playerData); NetworkClient* nwClient = gameClient->GetClient(); - -// Send the level information - { - Protocol_LobbyCreateGame lcg((char)1, (char)0, Utility::String::WStringToString(this->description.mapName, std::string())); - nwClient->Send(lcg); - } // Send the player data only { Protocol_ObjectCreatePlayer oc( playerData->GetPosition(), playerData->GetRotation(), playerData->GetScale(), playerData->GetID(), true, playerData->GetTeamID(), - /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); + /*nwClient->GetAlias()*/"Unknown", /*playerData->GetMesh()*/"char_white.dan"); nwClient->Send(oc); } @@ -223,7 +217,7 @@ bool GameSession::Join(gClient gameClient) IPlayerData* temp = this->gClients[i]->GetPlayer(); Protocol_ObjectCreatePlayer oc( temp->GetPosition(), temp->GetRotation(), temp->GetScale(), temp->GetID(), false, temp->GetTeamID(), - /*nwClient->GetAlias()*/"", /*playerData->GetMesh()*/"char_white.dan"); + /*nwClient->GetAlias()*/"Unknown", /*playerData->GetMesh()*/"char_white.dan"); nwClient->Send(oc); } } @@ -259,6 +253,8 @@ bool GameSession::Join(gClient gameClient) } } + gameClient->SetState(GameClient::ClientState_Ready); + return added; } diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs index 103a047f..bd168c3c 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs @@ -43,6 +43,7 @@ this.forceStart = new System.Windows.Forms.CheckBox(); this.label2 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); + this.labelClientsConnected = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.nrOfClients = new System.Windows.Forms.NumericUpDown(); this.buttonStartGame = new System.Windows.Forms.Button(); @@ -50,13 +51,14 @@ this.ServerInfoTextArea = new System.Windows.Forms.RichTextBox(); this.splitter1 = new System.Windows.Forms.Splitter(); this.clientInfoBox = new System.Windows.Forms.ListBox(); - this.labelClientsConnected = new System.Windows.Forms.Label(); + this.panel_CommanArea = new System.Windows.Forms.Panel(); ((System.ComponentModel.ISupportInitialize)(this.listenPort)).BeginInit(); this.panel_serverOptions.SuspendLayout(); this.panel_commands.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.timeLimit)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).BeginInit(); this.panel_clientArea.SuspendLayout(); + this.panel_CommanArea.SuspendLayout(); this.SuspendLayout(); // // serverToggle @@ -135,9 +137,10 @@ this.panel_serverOptions.Controls.Add(this.label_listenPort); this.panel_serverOptions.Controls.Add(this.lanBroadcast); this.panel_serverOptions.Controls.Add(this.label_serverName); - this.panel_serverOptions.Location = new System.Drawing.Point(12, 12); + this.panel_serverOptions.Dock = System.Windows.Forms.DockStyle.Top; + this.panel_serverOptions.Location = new System.Drawing.Point(0, 0); this.panel_serverOptions.Name = "panel_serverOptions"; - this.panel_serverOptions.Size = new System.Drawing.Size(183, 141); + this.panel_serverOptions.Size = new System.Drawing.Size(200, 141); this.panel_serverOptions.TabIndex = 6; // // panel_commands @@ -153,19 +156,19 @@ this.panel_commands.Controls.Add(this.label1); this.panel_commands.Controls.Add(this.nrOfClients); this.panel_commands.Controls.Add(this.buttonStartGame); - this.panel_commands.Location = new System.Drawing.Point(12, 159); + this.panel_commands.Location = new System.Drawing.Point(3, 150); this.panel_commands.Name = "panel_commands"; - this.panel_commands.Size = new System.Drawing.Size(183, 202); + this.panel_commands.Size = new System.Drawing.Size(191, 202); this.panel_commands.TabIndex = 7; this.panel_commands.Visible = false; // // mapName // - this.mapName.Location = new System.Drawing.Point(78, 7); + this.mapName.Location = new System.Drawing.Point(75, 10); this.mapName.Name = "mapName"; - this.mapName.Size = new System.Drawing.Size(98, 20); + this.mapName.Size = new System.Drawing.Size(113, 20); this.mapName.TabIndex = 12; - this.mapName.Text = "Unknown"; + this.mapName.Text = "2ofAll_updated.bias"; // // timeLimit // @@ -194,7 +197,7 @@ "Team death-match"}); this.gameModes.Location = new System.Drawing.Point(78, 66); this.gameModes.Name = "gameModes"; - this.gameModes.Size = new System.Drawing.Size(99, 21); + this.gameModes.Size = new System.Drawing.Size(110, 21); this.gameModes.TabIndex = 10; // // label3 @@ -236,6 +239,15 @@ this.label4.TabIndex = 8; this.label4.Text = "Map name"; // + // labelClientsConnected + // + this.labelClientsConnected.AutoSize = true; + this.labelClientsConnected.Location = new System.Drawing.Point(9, 149); + this.labelClientsConnected.Name = "labelClientsConnected"; + this.labelClientsConnected.Size = new System.Drawing.Size(104, 13); + this.labelClientsConnected.TabIndex = 8; + this.labelClientsConnected.Text = "Clients connected: 0"; + // // label1 // this.label1.AutoSize = true; @@ -282,9 +294,10 @@ this.panel_clientArea.Controls.Add(this.ServerInfoTextArea); this.panel_clientArea.Controls.Add(this.splitter1); this.panel_clientArea.Controls.Add(this.clientInfoBox); - this.panel_clientArea.Location = new System.Drawing.Point(202, 12); + this.panel_clientArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel_clientArea.Location = new System.Drawing.Point(200, 0); this.panel_clientArea.Name = "panel_clientArea"; - this.panel_clientArea.Size = new System.Drawing.Size(303, 349); + this.panel_clientArea.Size = new System.Drawing.Size(535, 616); this.panel_clientArea.TabIndex = 8; // // ServerInfoTextArea @@ -297,7 +310,7 @@ this.ServerInfoTextArea.Location = new System.Drawing.Point(0, 152); this.ServerInfoTextArea.Name = "ServerInfoTextArea"; this.ServerInfoTextArea.ReadOnly = true; - this.ServerInfoTextArea.Size = new System.Drawing.Size(303, 197); + this.ServerInfoTextArea.Size = new System.Drawing.Size(535, 464); this.ServerInfoTextArea.TabIndex = 1; this.ServerInfoTextArea.Text = ""; // @@ -306,7 +319,7 @@ this.splitter1.Dock = System.Windows.Forms.DockStyle.Top; this.splitter1.Location = new System.Drawing.Point(0, 147); this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(303, 5); + this.splitter1.Size = new System.Drawing.Size(535, 5); this.splitter1.TabIndex = 2; this.splitter1.TabStop = false; // @@ -316,26 +329,26 @@ this.clientInfoBox.FormattingEnabled = true; this.clientInfoBox.Location = new System.Drawing.Point(0, 0); this.clientInfoBox.Name = "clientInfoBox"; - this.clientInfoBox.Size = new System.Drawing.Size(303, 147); + this.clientInfoBox.Size = new System.Drawing.Size(535, 147); this.clientInfoBox.TabIndex = 0; // - // labelClientsConnected + // panel_CommanArea // - this.labelClientsConnected.AutoSize = true; - this.labelClientsConnected.Location = new System.Drawing.Point(9, 149); - this.labelClientsConnected.Name = "labelClientsConnected"; - this.labelClientsConnected.Size = new System.Drawing.Size(104, 13); - this.labelClientsConnected.TabIndex = 8; - this.labelClientsConnected.Text = "Clients connected: 0"; + this.panel_CommanArea.Controls.Add(this.panel_commands); + this.panel_CommanArea.Controls.Add(this.panel_serverOptions); + this.panel_CommanArea.Dock = System.Windows.Forms.DockStyle.Left; + this.panel_CommanArea.Location = new System.Drawing.Point(0, 0); + this.panel_CommanArea.Name = "panel_CommanArea"; + this.panel_CommanArea.Size = new System.Drawing.Size(200, 616); + this.panel_CommanArea.TabIndex = 9; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(517, 373); + this.ClientSize = new System.Drawing.Size(735, 616); this.Controls.Add(this.panel_clientArea); - this.Controls.Add(this.panel_commands); - this.Controls.Add(this.panel_serverOptions); + this.Controls.Add(this.panel_CommanArea); this.Name = "Form1"; this.Text = "Form1"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClosingEvent); @@ -347,6 +360,7 @@ ((System.ComponentModel.ISupportInitialize)(this.timeLimit)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.nrOfClients)).EndInit(); this.panel_clientArea.ResumeLayout(false); + this.panel_CommanArea.ResumeLayout(false); this.ResumeLayout(false); } @@ -376,6 +390,7 @@ private System.Windows.Forms.TextBox mapName; private System.Windows.Forms.CheckBox forceStart; private System.Windows.Forms.Label labelClientsConnected; + private System.Windows.Forms.Panel panel_CommanArea; } } diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.cs index 28a83c72..58deb2a9 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.cs @@ -9,6 +9,8 @@ using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Interop; using System.Runtime.InteropServices; +using System.Threading; +using System.Timers; namespace StandAloneLauncher { @@ -30,18 +32,17 @@ namespace StandAloneLauncher return true; } + public void Run() { while (this.Created) { Application.DoEvents(); - - //Do some stuff this.gameServer.ServerUpdate(); this.labelClientsConnected.Text = "Clients connected: " + this.gameServer.GetClientsConnectedCount().ToString(); } } - + private void button1_serverToggle_Click(object sender, EventArgs e) { if (this.serverIsRunning) @@ -88,8 +89,9 @@ namespace StandAloneLauncher { //this.gameServer.GameSetGameMode(this.gameModes.SelectedText); this.gameServer.GameSetGameTime((int)this.timeLimit.Value); - //this.gameServer.GameSetMapId(0); + this.gameServer.GameSetMapName(this.mapName.Text); this.gameServer.GameSetMaxClients((int)this.nrOfClients.Value); + if (!this.gameServer.GameStart( this.forceStart.Checked )) { this.ServerInfoTextArea.AppendText(DateTime.Now.ToUniversalTime() + "\n\t" + "Failed to start the game session!\n"); diff --git a/Code/Misc/Utilities/Resource/OResourceHandler.cpp b/Code/Misc/Utilities/Resource/OResourceHandler.cpp index 52d93af0..cc297f67 100644 --- a/Code/Misc/Utilities/Resource/OResourceHandler.cpp +++ b/Code/Misc/Utilities/Resource/OResourceHandler.cpp @@ -52,6 +52,8 @@ OHRESOURCE OysterResource::LoadResource(const wchar_t* filename, ResourceType ty } } + if(!resourceData) return 0; + return resourceData->GetResourceHandle(); } OHRESOURCE OysterResource::LoadResource(const wchar_t filename[], CustomLoadFunction loadFnc, int customId, bool force) diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp index 96d149f3..69872fc1 100644 --- a/Code/Network/NetworkAPI/NetworkClient.cpp +++ b/Code/Network/NetworkAPI/NetworkClient.cpp @@ -96,6 +96,10 @@ struct NetworkClient::PrivateData : public IThreadObject //printf("\t(%i)\n", this->sendQueue.Size()); OysterByte temp; CustomNetProtocol p = this->sendQueue.Pop(); + + if(p[0].value.netShort == 304) + int i = 0; + this->translator.Pack(temp, p); errorCode = this->connection.Send(temp); From a6f740e1f80dec8fb096a0e959fa00ac46933e69 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 16:44:38 +0100 Subject: [PATCH 27/36] bunch of stuff --- Code/Game/GameClient/GameClientState/GameState.cpp | 9 ++++++++- Code/Game/GameClient/GameClientState/LanMenuState.cpp | 10 ++++++++++ Code/Game/GameClient/GameClientState/LanMenuState.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 3576ae65..9a0bd4db 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -314,9 +314,16 @@ void GameState::ReadKeyInput() void GameState::DataRecieved( NetEvent e ) { + if( e.args.type == NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend ) + { // TODO: Reconnect + const char *breakpoint = "temp trap"; + this->privData->nwClient->Disconnect(); + this->ChangeState( GameClientState::ClientState_Main ); + } + CustomNetProtocol data = e.args.data.protocol; short ID = data[0].value.netShort; // fetching the id data. - + if( ProtocolIsGameplay(ID) ) { switch(ID) diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 11ca95da..178739d3 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -133,6 +133,16 @@ void LanMenuState::ChangeState( ClientState next ) this->privData->nextState = next; } +void LanMenuState::DataRecieved( NetEvent e ) +{ + if( e.args.type == NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend ) + { // TODO: Reconnect + const char *breakpoint = "temp trap"; + this->privData->nwClient->Disconnect(); + this->ChangeState( GameClientState::ClientState_Same ); + } +} + void OnButtonInteract_Connect( Oyster::Event::ButtonEvent& e ) { switch( e.state ) diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.h b/Code/Game/GameClient/GameClientState/LanMenuState.h index 57889eee..9c6a8ec4 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.h +++ b/Code/Game/GameClient/GameClientState/LanMenuState.h @@ -21,6 +21,8 @@ namespace DanBias virtual bool Release(); void ChangeState( ClientState next ); + void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); + private: struct MyData; ::Utility::DynamicMemory::UniquePointer privData; From 02b467be18e6ded0dbbb7bfa32cee89ae97bb923 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 17:04:27 +0100 Subject: [PATCH 28/36] const related edits in CustomNetProtocol Should be none impact besides positive ones --- Code/Network/NetworkAPI/CustomNetProtocol.cpp | 23 +++++++++++++++++-- Code/Network/NetworkAPI/CustomNetProtocol.h | 8 ++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Code/Network/NetworkAPI/CustomNetProtocol.cpp b/Code/Network/NetworkAPI/CustomNetProtocol.cpp index ecb57bf9..90fb100d 100644 --- a/Code/Network/NetworkAPI/CustomNetProtocol.cpp +++ b/Code/Network/NetworkAPI/CustomNetProtocol.cpp @@ -40,12 +40,13 @@ CustomNetProtocol::CustomNetProtocol() { this->privateData = new PrivateData(); } -CustomNetProtocol::CustomNetProtocol(CustomNetProtocol& o) +CustomNetProtocol::CustomNetProtocol(const CustomNetProtocol& o) { this->privateData = new PrivateData(); this->privateData->attributes = o.privateData->attributes; } -const CustomNetProtocol& CustomNetProtocol::operator=(CustomNetProtocol& o) + +CustomNetProtocol& CustomNetProtocol::operator=(const CustomNetProtocol& o) { if(this->privateData) { @@ -56,11 +57,29 @@ const CustomNetProtocol& CustomNetProtocol::operator=(CustomNetProtocol& o) this->privateData->attributes = o.privateData->attributes; return *this; } + CustomNetProtocol::~CustomNetProtocol() { delete this->privateData; this->privateData = 0; } + +const NetAttributeContainer& CustomNetProtocol::operator[](int ID) const +{ + //if(!this->privateData) this->privateData = new PrivateData(); + if((unsigned int)ID >= this->privateData->attributes.Size()) + { + NetAttributeContainer temp; + + temp.type = NetAttributeType_UNKNOWN; + memset(&temp.value, 0, sizeof(NetAttributeValue)); + + this->privateData->attributes.Push(ID, temp); + } + + return this->privateData->attributes[ID]; +} + NetAttributeContainer& CustomNetProtocol::operator[](int ID) { //if(!this->privateData) this->privateData = new PrivateData(); diff --git a/Code/Network/NetworkAPI/CustomNetProtocol.h b/Code/Network/NetworkAPI/CustomNetProtocol.h index 48feb3a9..24df6ebf 100644 --- a/Code/Network/NetworkAPI/CustomNetProtocol.h +++ b/Code/Network/NetworkAPI/CustomNetProtocol.h @@ -130,10 +130,12 @@ namespace Oyster public: CustomNetProtocol(); ~CustomNetProtocol(); - CustomNetProtocol(CustomNetProtocol& o); - const CustomNetProtocol& operator=(CustomNetProtocol& o); + CustomNetProtocol( const CustomNetProtocol& o); + CustomNetProtocol& operator=(const CustomNetProtocol& o); + + const NetAttributeContainer& operator[](int ID) const; + NetAttributeContainer& operator[](int ID); - NetAttributeContainer& operator[](int ID); void Set(int id, Oyster::Network::NetAttributeValue val, Oyster::Network::NetAttributeType type); void Set(int ID, std::string s); const NetAttributeContainer& Get(int id); From a85b803e5cbfea72144ea478db457c560fb092ae Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 17:28:24 +0100 Subject: [PATCH 29/36] GameClientState Patch virtual void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); changed to virtual const NetEvent & DataRecieved( const NetEvent &message ); /****************************************************************** * @param message of the event * @return message or GameClientState::event_processed. ******************************************************************/ --- .../GameClientState/GameClientState.cpp | 9 +++++-- .../GameClientState/GameClientState.h | 10 +++++-- .../GameClient/GameClientState/GameState.cpp | 26 +++++++++++-------- .../GameClient/GameClientState/GameState.h | 2 +- .../GameClientState/LanMenuState.cpp | 10 ------- .../GameClient/GameClientState/LanMenuState.h | 2 -- .../GameClientState/LobbyAdminState.cpp | 7 ++--- .../GameClientState/LobbyAdminState.h | 4 +-- .../GameClient/GameClientState/LobbyState.cpp | 8 +++--- .../GameClient/GameClientState/LobbyState.h | 2 +- .../GameClientState/NetLoadState.cpp | 17 +++++++----- .../GameClient/GameClientState/NetLoadState.h | 2 +- 12 files changed, 55 insertions(+), 44 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/GameClientState.cpp b/Code/Game/GameClient/GameClientState/GameClientState.cpp index dab88b2e..add8c15b 100644 --- a/Code/Game/GameClient/GameClientState/GameClientState.cpp +++ b/Code/Game/GameClient/GameClientState/GameClientState.cpp @@ -3,9 +3,14 @@ using namespace DanBias::Client; using namespace ::Oyster::Network; +const GameClientState::NetEvent GameClientState::event_processed = GameClientState::NetEvent(); + GameClientState::GameClientState() {} GameClientState::~GameClientState() {} -void GameClientState::DataRecieved( NetEvent e ) -{ /* do nothing */ } \ No newline at end of file +const GameClientState::NetEvent & GameClientState::DataRecieved( const GameClientState::NetEvent &message ) +{ + /* do nothing */ + return message; +} \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/GameClientState.h b/Code/Game/GameClient/GameClientState/GameClientState.h index 3822c7b0..9891a16c 100644 --- a/Code/Game/GameClient/GameClientState/GameClientState.h +++ b/Code/Game/GameClient/GameClientState/GameClientState.h @@ -22,7 +22,9 @@ namespace DanBias { namespace Client ClientState_Quit }; - public: + typedef ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> NetEvent; + static const NetEvent event_processed; + GameClientState(); virtual ~GameClientState(); virtual bool Init( SharedStateContent &shared ) = 0; @@ -31,7 +33,11 @@ namespace DanBias { namespace Client virtual bool Release() = 0; virtual void ChangeState( ClientState next ) = 0; - virtual void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); + /****************************************************************** + * @param message of the event + * @return message or GameClientState::event_processed. + ******************************************************************/ + virtual const NetEvent & DataRecieved( const NetEvent &message ); }; } } diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 9a0bd4db..c6d77f76 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -312,20 +312,22 @@ void GameState::ReadKeyInput() // TODO: implement sub-menu } -void GameState::DataRecieved( NetEvent e ) +const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState::NetEvent &message ) { - if( e.args.type == NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend ) + if( message.args.type == NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend ) { // TODO: Reconnect const char *breakpoint = "temp trap"; this->privData->nwClient->Disconnect(); this->ChangeState( GameClientState::ClientState_Main ); } - CustomNetProtocol data = e.args.data.protocol; - short ID = data[0].value.netShort; // fetching the id data. + // fetching the id data. + short ID = message.args.data.protocol[0].value.netShort; if( ProtocolIsGameplay(ID) ) { + CustomNetProtocol data = message.args.data.protocol; + switch(ID) { case protocol_Gameplay_ObjectPickup: break; /** @todo TODO: implement */ @@ -341,13 +343,13 @@ void GameState::DataRecieved( NetEventprivData->dynamicObjects)[decoded.object_ID]->setPos( decoded.position ); } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectScale: { Protocol_ObjectScale decoded(data); (*this->privData->dynamicObjects)[decoded.object_ID]->setScale( decoded.scale ); } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectRotation: { Protocol_ObjectRotation decoded(data); @@ -359,7 +361,7 @@ void GameState::DataRecieved( NetEventprivData->dynamicObjects)[decoded.object_ID]->setRot( rotation ); } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectPositionRotation: { Protocol_ObjectPositionRotation decoded(data); @@ -380,7 +382,7 @@ void GameState::DataRecieved( NetEventsetRot( rotation ); } } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectEnabled: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectDisabled: { @@ -393,7 +395,7 @@ void GameState::DataRecieved( NetEventprivData->dynamicObjects->erase( object ); } } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectCreate: { Protocol_ObjectCreate decoded(data); @@ -414,13 +416,13 @@ void GameState::DataRecieved( NetEventprivData->dynamicObjects)[decoded.object_ID] = object; } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectCreatePlayer: { Protocol_ObjectCreatePlayer decoded(data); this->InitiatePlayer( decoded.object_ID, decoded.meshName, decoded.position, decoded.rotationQ, decoded.scale, decoded.owner ); } - break; + return GameClientState::event_processed; case protocol_Gameplay_ObjectJoinTeam: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectLeaveTeam: break; /** @todo TODO: implement */ case protocol_Gameplay_ObjectWeaponCooldown: break; /** @todo TODO: implement */ @@ -439,4 +441,6 @@ void GameState::DataRecieved( NetEvent e ); + const NetEvent & DataRecieved( const NetEvent &message ); private: struct MyData; diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 178739d3..11ca95da 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -133,16 +133,6 @@ void LanMenuState::ChangeState( ClientState next ) this->privData->nextState = next; } -void LanMenuState::DataRecieved( NetEvent e ) -{ - if( e.args.type == NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend ) - { // TODO: Reconnect - const char *breakpoint = "temp trap"; - this->privData->nwClient->Disconnect(); - this->ChangeState( GameClientState::ClientState_Same ); - } -} - void OnButtonInteract_Connect( Oyster::Event::ButtonEvent& e ) { switch( e.state ) diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.h b/Code/Game/GameClient/GameClientState/LanMenuState.h index 9c6a8ec4..57889eee 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.h +++ b/Code/Game/GameClient/GameClientState/LanMenuState.h @@ -21,8 +21,6 @@ namespace DanBias virtual bool Release(); void ChangeState( ClientState next ); - void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); - private: struct MyData; ::Utility::DynamicMemory::UniquePointer privData; diff --git a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp index 070d8b48..43419e88 100644 --- a/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyAdminState.cpp @@ -112,10 +112,10 @@ void LobbyAdminState::ChangeState( ClientState next ) using namespace ::Oyster::Network; -void LobbyAdminState::DataRecieved( NetEvent e ) +const GameClientState::NetEvent & LobbyAdminState::DataRecieved( const GameClientState::NetEvent &message ) { - CustomNetProtocol data = e.args.data.protocol; - short ID = data[0].value.netShort; // fetching the id data. + // fetching the id data. + short ID = message.args.data.protocol[0].value.netShort; // Block irrelevant messages. if( ProtocolIsLobby(ID) ) @@ -141,6 +141,7 @@ void LobbyAdminState::DataRecieved( NetEvent& e ) diff --git a/Code/Game/GameClient/GameClientState/LobbyAdminState.h b/Code/Game/GameClient/GameClientState/LobbyAdminState.h index 49ae9274..7e201e94 100644 --- a/Code/Game/GameClient/GameClientState/LobbyAdminState.h +++ b/Code/Game/GameClient/GameClientState/LobbyAdminState.h @@ -29,8 +29,8 @@ namespace DanBias bool Render(); bool Release(); void ChangeState( ClientState next ); - void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); - + const NetEvent & DataRecieved( const NetEvent &message ); + private: struct MyData; ::Utility::DynamicMemory::UniquePointer privData; diff --git a/Code/Game/GameClient/GameClientState/LobbyState.cpp b/Code/Game/GameClient/GameClientState/LobbyState.cpp index a6d03527..0b117016 100644 --- a/Code/Game/GameClient/GameClientState/LobbyState.cpp +++ b/Code/Game/GameClient/GameClientState/LobbyState.cpp @@ -112,10 +112,10 @@ void LobbyState::ChangeState( ClientState next ) using namespace ::Oyster::Network; -void LobbyState::DataRecieved( NetEvent e ) +const GameClientState::NetEvent & LobbyState::DataRecieved( const GameClientState::NetEvent &message ) { - CustomNetProtocol data = e.args.data.protocol; - short ID = data[0].value.netShort; // fetching the id data. + // fetching the id data. + short ID = message.args.data.protocol[0].value.netShort; // Block irrelevant messages. if( ProtocolIsLobby(ID) ) @@ -141,6 +141,8 @@ void LobbyState::DataRecieved( NetEvent& e ) diff --git a/Code/Game/GameClient/GameClientState/LobbyState.h b/Code/Game/GameClient/GameClientState/LobbyState.h index 694aaa38..496c54ed 100644 --- a/Code/Game/GameClient/GameClientState/LobbyState.h +++ b/Code/Game/GameClient/GameClientState/LobbyState.h @@ -31,7 +31,7 @@ namespace DanBias bool Render(); bool Release(); void ChangeState( ClientState next ); - void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); + const NetEvent & DataRecieved( const NetEvent &message ); private: struct MyData; diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index 9a88072c..29906d77 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -90,20 +90,25 @@ void NetLoadState::ChangeState( ClientState next ) this->privData->nextState = next; } -void NetLoadState::DataRecieved( NetEvent e ) +const GameClientState::NetEvent & NetLoadState::DataRecieved( const GameClientState::NetEvent &message ) { // fetching the id data. - short ID = e.args.data.protocol[0].value.netShort; + short ID = message.args.data.protocol[0].value.netShort; - if( ID == protocol_Lobby_CreateGame && !this->privData->loading ) + if( ID == protocol_Lobby_CreateGame ) { - this->LoadGame( Protocol_LobbyCreateGame(e.args.data.protocol).mapName ); - this->ChangeState( ClientState_Game ); - this->privData->loading = false; + if( !this->privData->loading ) + { + this->LoadGame( Protocol_LobbyCreateGame(message.args.data.protocol).mapName ); + this->ChangeState( ClientState_Game ); + this->privData->loading = false; + } + return GameClientState::event_processed; } else { // HACK: Debug trap const char *breakPoint = "Being greedy."; + return message; } } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.h b/Code/Game/GameClient/GameClientState/NetLoadState.h index ea9f9f6a..16e32867 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.h +++ b/Code/Game/GameClient/GameClientState/NetLoadState.h @@ -21,7 +21,7 @@ namespace DanBias bool Release(); void ChangeState( ClientState next ); - void DataRecieved( ::Oyster::Network::NetEvent<::Oyster::Network::NetworkClient*, ::Oyster::Network::NetworkClient::ClientEventArgs> e ); + const NetEvent & DataRecieved( const NetEvent &message ); private: struct MyData; From 00fe2e6aa74a7d3f308040cb172764231f18bc2b Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Tue, 18 Feb 2014 17:42:00 +0100 Subject: [PATCH 30/36] Camera swap Trying the quaternion based one instead --- Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp | 10 +++++++--- Code/Game/GameClient/GameClientState/Camera_FPSV2.h | 1 + Code/Game/GameClient/GameClientState/GameState.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp index b1863242..12506d3c 100644 --- a/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp +++ b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp @@ -36,11 +36,15 @@ void Camera_FPSV2::SetPosition( const Float3 &translation ) this->body.translation = translation; } +void Camera_FPSV2::SetRotation( const Quaternion &rotation ) +{ + this->body.rotation = rotation; + this->head.SetRotation( rotation * Rotation(this->pitchUp, this->GetNormalOf(Float3::standard_unit_x) ) ); +} + void Camera_FPSV2::SetAngular( const Float3 &axis ) { - this->body.rotation = Rotation( axis ); - this->head.SetRotation( this->body.rotation ); - this->pitchUp = 0.0f; + this->SetRotation( Rotation(axis) ); } void Camera_FPSV2::SetProjection( const Float4x4 &matrix ) diff --git a/Code/Game/GameClient/GameClientState/Camera_FPSV2.h b/Code/Game/GameClient/GameClientState/Camera_FPSV2.h index 968053c7..7f66b185 100644 --- a/Code/Game/GameClient/GameClientState/Camera_FPSV2.h +++ b/Code/Game/GameClient/GameClientState/Camera_FPSV2.h @@ -14,6 +14,7 @@ public: void SetHeadOffset( const ::Oyster::Math::Float3 &translation ); void SetPosition( const ::Oyster::Math::Float3 &translation ); + void SetRotation( const ::Oyster::Math::Quaternion &rotation ); void SetAngular( const ::Oyster::Math::Float3 &axis ); void SetProjection( const ::Oyster::Math::Float4x4 &matrix ); void SetOrthographicProjection( ::Oyster::Math::Float width, ::Oyster::Math::Float height, ::Oyster::Math::Float nearClip, ::Oyster::Math::Float farClip ); diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index c6d77f76..bfd15532 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -2,7 +2,7 @@ #include "DllInterfaces/GFXAPI.h" #include #include "NetworkClient.h" -#include "Camera_FPS.h" +#include "Camera_FPSV2.h" #include #include "C_obj/C_Player.h" @@ -39,7 +39,7 @@ struct GameState::MyData bool key_Reload_Shaders; C_Player player; - Camera_FPS camera; + Camera_FPSV2 camera; int myId; @@ -357,7 +357,7 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState // if is this player. Remember to change camera if( this->privData->myId == decoded.object_ID ) - this->privData->camera.SetAngular( AngularAxis(rotation) ); + this->privData->camera.SetRotation( rotation ); (*this->privData->dynamicObjects)[decoded.object_ID]->setRot( rotation ); } @@ -372,7 +372,7 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState if( this->privData->myId == decoded.object_ID ) { this->privData->camera.SetPosition( position ); - this->privData->camera.SetAngular( AngularAxis(rotation) ); + this->privData->camera.SetRotation( rotation ); } C_DynamicObj *object = (*this->privData->dynamicObjects)[decoded.object_ID]; From 8a0dbe969c15cefa47d20d9bfacabac9c27788fc Mon Sep 17 00:00:00 2001 From: Dennis Andersen Date: Tue, 18 Feb 2014 21:24:21 +0100 Subject: [PATCH 31/36] GameLogic - Added filename to paramater when initiating a level, Also changed some string to wstrings --- Code/Game/GameLogic/Game.cpp | 6 ++---- Code/Game/GameLogic/Game.h | 2 +- Code/Game/GameLogic/GameAPI.h | 2 +- Code/Game/GameLogic/Level.cpp | 2 +- Code/Game/GameLogic/Level.h | 2 +- Code/Game/GameLogic/LevelLoader/LevelLoader.cpp | 16 ++++++++-------- Code/Game/GameLogic/LevelLoader/LevelLoader.h | 10 +++++----- Code/Game/GameLogic/LevelLoader/LevelParser.cpp | 10 ++++++++-- Code/Game/GameLogic/LevelLoader/LevelParser.h | 4 ++-- Code/Game/GameLogic/LevelLoader/Loader.cpp | 6 +++--- Code/Game/GameLogic/LevelLoader/Loader.h | 2 +- .../GameLogic/LevelLoader/ParseFunctions.cpp | 3 ++- 12 files changed, 35 insertions(+), 30 deletions(-) diff --git a/Code/Game/GameLogic/Game.cpp b/Code/Game/GameLogic/Game.cpp index 900799e3..ba294349 100644 --- a/Code/Game/GameLogic/Game.cpp +++ b/Code/Game/GameLogic/Game.cpp @@ -76,14 +76,12 @@ Game::PlayerData* Game::CreatePlayer() return this->players[i]; } -Game::LevelData* Game::CreateLevel() +Game::LevelData* Game::CreateLevel(const wchar_t mapName[255]) { if(this->level) return this->level; this->level = new LevelData(); - //this->level->level->InitiateLevel(1000); - this->level->level->InitiateLevel("../Content/Worlds/ccc.bias"); - + this->level->level->InitiateLevel(mapName); return this->level; } diff --git a/Code/Game/GameLogic/Game.h b/Code/Game/GameLogic/Game.h index 9c21ec1b..6623756f 100644 --- a/Code/Game/GameLogic/Game.h +++ b/Code/Game/GameLogic/Game.h @@ -72,7 +72,7 @@ namespace GameLogic void GetAllPlayerPositions() const override; PlayerData* CreatePlayer() override; - LevelData* CreateLevel() override; + LevelData* CreateLevel(const wchar_t mapName[255] ) override; void CreateTeam() override; bool NewFrame() override; void SetFPS( int FPS ) override; diff --git a/Code/Game/GameLogic/GameAPI.h b/Code/Game/GameLogic/GameAPI.h index 3325115f..65d606d8 100644 --- a/Code/Game/GameLogic/GameAPI.h +++ b/Code/Game/GameLogic/GameAPI.h @@ -139,7 +139,7 @@ namespace GameLogic /** Creates a level * @return Returns a ILevelData container to use for level manipulation */ - virtual ILevelData* CreateLevel( void ) = 0; + virtual ILevelData* CreateLevel( const wchar_t mapName[255] ) = 0; /** Creates a team * @return ? diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 4d3cf703..3c289766 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -197,7 +197,7 @@ ICustomBody* Level::InitRigidBodySphere( const ObjectHeader* obj) rigidBody = API::Instance().AddCollisionSphere( rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, obj->boundingVolume.sphere.restitutionCoeff , obj->boundingVolume.sphere.frictionCoeffStatic , obj->boundingVolume.sphere.frictionCoeffDynamic); return rigidBody; } -void Level::InitiateLevel(std::string levelPath) +void Level::InitiateLevel(std::wstring levelPath) { LevelLoader ll; std::vector> objects; diff --git a/Code/Game/GameLogic/Level.h b/Code/Game/GameLogic/Level.h index 623d04b2..18d650e8 100644 --- a/Code/Game/GameLogic/Level.h +++ b/Code/Game/GameLogic/Level.h @@ -30,7 +30,7 @@ namespace GameLogic * Initiates a level for players to play on * @param levelPath: Path to a file that contains all information on the level ********************************************************/ - void InitiateLevel(std::string levelPath); + void InitiateLevel(std::wstring levelPath); void InitiateLevel(float radius); Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj); Oyster::Physics::ICustomBody* InitRigidBodySphere( const ObjectHeader* obj); diff --git a/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp b/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp index 8fe880f3..205da712 100644 --- a/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp +++ b/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp @@ -11,17 +11,17 @@ using namespace GameLogic::LevelFileLoader; struct LevelLoader::PrivData { LevelParser parser; - std::string folderPath; + std::wstring folderPath; }; LevelLoader::LevelLoader() : pData(new PrivData) { //standard path - pData->folderPath = ""; + pData->folderPath = L""; } -LevelLoader::LevelLoader(std::string folderPath) +LevelLoader::LevelLoader(std::wstring folderPath) : pData(new PrivData) { pData->folderPath = folderPath; @@ -31,22 +31,22 @@ LevelLoader::~LevelLoader() { } -std::vector> LevelLoader::LoadLevel(std::string fileName) +std::vector> LevelLoader::LoadLevel(std::wstring fileName) { return pData->parser.Parse(pData->folderPath + fileName); } -LevelMetaData LevelLoader::LoadLevelHeader(std::string fileName) +LevelMetaData LevelLoader::LoadLevelHeader(std::wstring fileName) { return pData->parser.ParseHeader(pData->folderPath + fileName); } -std::string LevelLoader::GetFolderPath() +std::wstring LevelLoader::GetFolderPath() { return this->pData->folderPath; } -void LevelLoader::SetFolderPath(std::string folderPath) +void LevelLoader::SetFolderPath(std::wstring folderPath) { - + this->pData->folderPath = folderPath; } \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/LevelLoader.h b/Code/Game/GameLogic/LevelLoader/LevelLoader.h index aa67c4f5..c14e2c4c 100644 --- a/Code/Game/GameLogic/LevelLoader/LevelLoader.h +++ b/Code/Game/GameLogic/LevelLoader/LevelLoader.h @@ -20,7 +20,7 @@ namespace GameLogic /*********************************************************** * Lets you set the standard folderpath for the levels ********************************************************/ - LevelLoader(std::string folderPath); + LevelLoader(std::wstring folderPath); ~LevelLoader(); /******************************************************** @@ -28,24 +28,24 @@ namespace GameLogic * @param fileName: Path/name to the level-file that you want to load. * @return: Returns all structs with objects and information about the level. ********************************************************/ - std::vector> LoadLevel(std::string fileName); + std::vector> LoadLevel(std::wstring fileName); /******************************************************** * Just for fast access for the meta information about the level. * @param fileName: Path to the level-file that you want to load. * @return: Returns the meta information about the level. ********************************************************/ - LevelMetaData LoadLevelHeader(std::string fileName); //. + LevelMetaData LoadLevelHeader(std::wstring fileName); //. /*********************************************************** * @return: Returns the current standard folder path ********************************************************/ - std::string GetFolderPath(); + std::wstring GetFolderPath(); /*********************************************************** * Sets the standard folder path ********************************************************/ - void SetFolderPath(std::string folderPath); + void SetFolderPath(std::wstring folderPath); private: struct PrivData; diff --git a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp b/Code/Game/GameLogic/LevelLoader/LevelParser.cpp index 1e33361d..061e2c08 100644 --- a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp +++ b/Code/Game/GameLogic/LevelLoader/LevelParser.cpp @@ -20,7 +20,7 @@ LevelParser::~LevelParser() { } -std::vector> LevelParser::Parse(std::string filename) +std::vector> LevelParser::Parse(std::wstring filename) { int bufferSize = 0; int counter = 0; @@ -32,6 +32,12 @@ std::vector> LevelParser::Parse(std::string filen Loader loader; char* buffer = (char*)loader.LoadFile(filename.c_str(), bufferSize); + // Check if file was loaded, else return empty vector + if(bufferSize == 0) + { + return std::vector>(); + } + //Read format version LevelLoaderInternal::FormatVersion levelFormatVersion; ParseObject(&buffer[counter], &levelFormatVersion, sizeof(levelFormatVersion)); @@ -215,7 +221,7 @@ std::vector> LevelParser::Parse(std::string filen } //för meta information om leveln. -LevelMetaData LevelParser::ParseHeader(std::string filename) +LevelMetaData LevelParser::ParseHeader(std::wstring filename) { int bufferSize = 0; int counter = 0; diff --git a/Code/Game/GameLogic/LevelLoader/LevelParser.h b/Code/Game/GameLogic/LevelLoader/LevelParser.h index 8f2a9150..d0cb1f03 100644 --- a/Code/Game/GameLogic/LevelLoader/LevelParser.h +++ b/Code/Game/GameLogic/LevelLoader/LevelParser.h @@ -17,10 +17,10 @@ namespace GameLogic ~LevelParser(); // - std::vector> Parse(std::string filename); + std::vector> Parse(std::wstring filename); // - LevelMetaData ParseHeader(std::string filename); + LevelMetaData ParseHeader(std::wstring filename); private: LevelLoaderInternal::FormatVersion formatVersion; diff --git a/Code/Game/GameLogic/LevelLoader/Loader.cpp b/Code/Game/GameLogic/LevelLoader/Loader.cpp index 3e15315c..19ffa0f1 100644 --- a/Code/Game/GameLogic/LevelLoader/Loader.cpp +++ b/Code/Game/GameLogic/LevelLoader/Loader.cpp @@ -9,13 +9,13 @@ using namespace GameLogic::LevelFileLoader; using namespace Oyster::Resource; using namespace std; -char* Loader::LoadFile(std::string fileName, int &size) +char* Loader::LoadFile(std::wstring fileName, int &size) { //convert from string to wstring - std::wstring temp(fileName.begin(), fileName.end()); + //std::wstring temp(fileName.begin(), fileName.end()); //convert from wstring to wchar then loads the file - char* buffer = (char*)OysterResource::LoadResource(temp.c_str(), Oyster::Resource::ResourceType::ResourceType_Byte_Raw, -1 , false); + char* buffer = (char*)OysterResource::LoadResource(fileName.c_str(), Oyster::Resource::ResourceType::ResourceType_Byte_Raw, -1 , false); size = OysterResource::GetResourceSize(buffer); return buffer; diff --git a/Code/Game/GameLogic/LevelLoader/Loader.h b/Code/Game/GameLogic/LevelLoader/Loader.h index 0433194e..6deb8900 100644 --- a/Code/Game/GameLogic/LevelLoader/Loader.h +++ b/Code/Game/GameLogic/LevelLoader/Loader.h @@ -17,7 +17,7 @@ namespace GameLogic public: Loader (){}; ~Loader(){}; - char* LoadFile(std::string fileName, int &size); + char* LoadFile(std::wstring fileName, int &size); //TODO: //Add functionality to load physicsObjects (hitboxes) diff --git a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp index daa62752..76d7d6c3 100644 --- a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp +++ b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp @@ -5,6 +5,7 @@ #include "ParseFunctions.h" #include "Packing/Packing.h" #include "Loader.h" +#include "Utilities.h" #include using namespace Oyster::Packing; @@ -149,7 +150,7 @@ namespace GameLogic //Läs in filen. int fileLength = 0; Loader loader; - char* buf = loader.LoadFile("../Content/Worlds/cgf/"+ fileName, fileLength); + char* buf = loader.LoadFile(L"../Content/Worlds/cgf/" + Utility::String::StringToWstring(fileName, wstring()), fileLength); start = 0; LevelLoaderInternal::FormatVersion version; From af15157283dbfb99d55394ee255013ac6129ad74 Mon Sep 17 00:00:00 2001 From: Dennis Andersen Date: Wed, 19 Feb 2014 00:20:01 +0100 Subject: [PATCH 32/36] GameLogic - Added default path to level data --- Code/Game/GameLogic/Level.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 969d332d..4106dabf 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -200,6 +200,7 @@ ICustomBody* Level::InitRigidBodySphere( const ObjectHeader* obj) bool Level::InitiateLevel(std::wstring levelPath) { LevelLoader ll; + ll.SetFolderPath(L"..\\Content\\Worlds\\"); std::vector> objects; objects = ll.LoadLevel(levelPath); From 7af1c18dcfea0d086b1f28a154e0272052b09833 Mon Sep 17 00:00:00 2001 From: Dennis Andersen Date: Wed, 19 Feb 2014 02:10:13 +0100 Subject: [PATCH 33/36] GameServer - Some minor features to Standalone server --- .../LanServer/StandAloneLauncher/App.config | 12 + .../StandAloneLauncher/Form1.Designer.cs | 312 ++++++++++++++++-- .../LanServer/StandAloneLauncher/Form1.cs | 63 +++- .../Properties/Settings.Designer.cs | 32 +- .../Properties/Settings.settings | 14 +- .../StandAloneLauncher.csproj | 1 + 6 files changed, 372 insertions(+), 62 deletions(-) diff --git a/Code/Game/LanServer/StandAloneLauncher/App.config b/Code/Game/LanServer/StandAloneLauncher/App.config index 32412984..efeb1570 100644 --- a/Code/Game/LanServer/StandAloneLauncher/App.config +++ b/Code/Game/LanServer/StandAloneLauncher/App.config @@ -1,5 +1,10 @@  + + +