从你眼睛看着自己最幸福的倒影
握在手心的默契是明天的指引
无论是远近什么世纪
在天堂拥抱或荒野流离
我爱你我敢去未知的任何命运
我爱你我愿意准你来跋扈地决定世界边境
偶尔我真的不懂你又有谁真懂自己
往往两个人多亲密是透过伤害来证明
像焦虑不安我就任性
怕泄漏你怕所以你生气
我爱你让我听你的疲惫和恐惧
我爱你我想亲你倔强到极限的心
我撑起所有爱围成风雨的禁地
当狂风豪雨想让你喘口气
被划破的信心需要时间痊愈
梦想牵着怀疑未来看不清
就紧紧地拥抱去传递
能量和勇气我爱你
我爱你我想去未知的任何命运
我爱你让我听你的疲惫和恐惧
我爱你我想亲你倔强到极限的心
哪里都一起去一起仰望星星
一起走出森林一起品尝回忆
一起误会妒忌一起雨过天晴
一起更懂自己一起找到意义
让我爱你
我不要没有你我不能没有你绝不能没有你
Monday, March 30, 2009
我哪里都不去 就在这等你
Saturday, March 28, 2009
Cross
小时候
喜欢在岔路口等妈妈下班
看着来往的车辆
在岔路口
选择属于自己的方向
长大了
越来越害怕选择
哪怕对现实再无奈
也不想改变
或许是不敢
可是心里还是有些不甘
反复的说服自己
一秒钟后
一切构想好的安慰
都化为虚无
在她的支持下
终于有一次的做了选择的准备
邮件已经发出
未来怎样
结果如何
只有慢慢的等待
不知道该如何去等待
一个人的时候总会想到许多许多
多到自己无法承受
好累……
做人好累
可是今生只能做人
别无选择
那就努力做好吧
就像她说的一个不成功
联系下一个
找到一个真正适合自己的地方
既然如此
就要学会勇敢
学会面对
学会承担
Friday, March 27, 2009
Finger Family
梦是要自己掌握的,就好像天空中的那片云朵,
就算被风吹去到异乡他国,也总会有一天在经过
即使有一天梦被打碎了,我也会更加坚强的活着
因为我坚信风马上就会把它吹落,一种天晴的收获
更美好的天空还在远方等着,现在不是忧郁的时刻
要相信等待并不能带给你什么,因为现在我还活着
把微笑当做你晴天的指针,然后向着快乐出发
现在已没有什么要顾虑的,至少现在我还活着
Friday, March 20, 2009
Shift UI in Ogre dynamically
Changing UI dynamically in the application is needed especially when you want the user do something step by step.
At the beginning, I thought it would be very difficult. Also I found nothing when searching on the Internet. When I noticed the ui is loaded through following method:
CEGUI::Window *sheet=CEGUI::WindowManager::getSingleton().loadWindowLayout(
(CEGUI::utf8*)"shapegui.layout");
mSystem->setGUISheet(sheet);
How about directly changing the ui when certain events occurs. Have a try. I just added the above code to a button event, using a new UI layout file. When I click that button, it works!!!!
Ogre Rendering Loop
The typical Ogre application will render one frame after another, ceaselessly.That means we just start the Root::startRendering() method and everything will be done automatically.
However, sometimes we want to update the scene after we change some scene content. With Root::startRendering(), we can just do our redraw process and let the system to render the new scene.
Moreover, Root::startRendering() method simply starts a small loop that calls another method renderOneFrame().
Thus, we can manually do rendering with renderOneFrame() method.
Tga & imageset for CEGUI
Add static images to the CEGUI used in Ogre, we need assemble images into a tga files in the imageset form.
First, create a tga image file containing all the needed images.
1) Using Photoshop, create a new document with transparent background.
2) Put all the images in that document and arrange them in a good order and position;
3) Select only those will not be transparent parts and all these kinds of parts, in the channel frame, click the button"Save Selection as Channel" the one which is shown as a dark rectangle with whit circle. After clicking this button, a new alpha channel will be created. Note, if there already exists an alpha channel delete it.
4) Save the document as tga file format. And this step is done.
Second, create a *.imageset file, which is a XML based file to describe the tga file, the format is something like this:
1: <?xml version="1.0" ?>
2: <Imageset Name="ShapeGUI" Imagefile="ShapeGUI.tga" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true">
3: <Image Name="ShapeLabel" XPos="0" YPos="2" Width="190" Height="40" />
4: </Imageset>
Finally, we can use those images in CEGUI.
When create a staticImage window, set the Image property to something like this:
1: set:ShapeGUI image:ShapeLabel
Then it's done.
Develop your own coding style
For the comment, usually for single line comment we just use "//". Also, when we debug the application, to comment or uncomment some single code, we also use "//". Sometime it's better to distinguish them but not compulsory.
Therefore, I decide to use "///" to begin the informative comments and use "//" to just comment the code for debugging.
Appealing Character Factory
ACFactory
ACF
Thursday, March 19, 2009
Ogre Render Queue
A physical Engine
http://www.box2d.org/index.html
To use CEGUI in Ogre, I followed the tutorial in the wiki and added the gui to my existing code. However, I found that my drawing code draw twice!!!!!
One is drawn on the whole window and the other is draw as I desired in the gui frame window.
For two days searching on line, found nothing help.
I just comment everything and test every code part. Finally I found that both the gui and my drawing objects are in the RENDER_QUEUE_OVERLAY.
That's the problem!!!!!
By changing my drawing objects to RENDERE_WORLD_GEOMETRY_1, everything works well!!!!!!
Thank goodness!!!
News Digest Mar.19
Studying the Female Form: Math Could Lead to Sexier Lingerie, Safer Labcoats
PhysOrg.com (03/12/09)
Researchers at Japan's Kyoto Institute of Technology and Osaka University have developed a computerized model for identifying body shape components that can be used to design close-fitting products. The researchers have developed a technique that allows them to extract a person's body shape components from three-dimensional (3D) data and then link that data to a classification of trunk shapes. The researchers measured 560 Japanese women aged 19 to 63 using laser metrology to map control points at specific places on their trunks. The data was applied to a generic 3D trunk model to create a database of body shapes. The researchers then used statistical and cluster analysis to classify trunk characteristics into five different groups, each depending on slimness, breast size and angle, neck type, and shoulder slope. The researchers say their analysis will be helpful in the production of clothes that fit better for each size and shape, and in improving practical functional clothes used for body adjustments and posture improvement.
http://www.physorg.com/news156096749.html
End-end Principle in System Design
Since certainly functionality must be implemented on an end-end basis, "functions placed at the lower levels may be redundant of of little value when compared to the cost of providing them at the higher level.
[Saltzer 1984]
Wednesday, March 18, 2009
Using Maple in command line
In Command-line Maple, type following command to execute the input file:
read "D:/model.mpl";
Also we can use following command to redirect the output to a text file:
[Installation Folder]\Maple 12\bin.win\cmaple.exe "D:/model.mpl" > res.txt
Tuesday, March 17, 2009
Using BCDEDIT.EXE to Clean Up Windows Vista Boot Manager
In this blog post, I will describe how to clean up the Windows Vista Boot Manager using the command line tool calledBCDEDIT.EXE located at C:\Windows\System32 assuming Windows Vista is installed on Drive C.
You may have installed another operating system earlier on another drive and you now have formatted this drive. When you boot your computer, you are presented with a choice of what operating system to start with but one of the entries do not work because you have removed the operating system. BCDEDIT.EXE is a command line tool to manage the BCD store (Windows Vista Boot Manager). For a list of complete commands that BCDEDIT.EXE offers, open a Command Window and type bcdedit /?.
NOTE: To enlarge the images, simply click on the images you would like to view. With Internet Explorer 7, you can right-click on the image to select Open in New Tab.
Removing invalid entries in the Windows Vista Boot Manager
- Open an elevated Command Window, refer to my blog post "Opening an Elevated Command Prompt" for instructions.
- Type:
bcdedit > c:\users\yourusername\desktop\bcd.txt
NOTE: A file called "bcd.txt" should now be on the desktop. - Open "bcd.txt" and note the "identifier" value for the invalid boot entries.
- Type:
bcdedit /delete {identifier} - To remove the timeout of the Windows Boot Manager, type:
bcdedit /timeout 0
Sunday, March 15, 2009
Big rain
Out of the window, the rain comes with the dark clouds. Thick cloud covered the whole city, thunder shakes the earth, lighting shines its power quickly but short.
Unconformable...
Never feel so tired and ...
Home, i wanna go home ...
Tuesday, March 10, 2009
To start with Ogre
Add "stdio.h" header file to the orge application can enable the command line promote to display the execution information.
Be careful about the namespaces!!!!
As many data structures in Ogre uses the Ogre namespace, if you want to use it, do remember to use the Ogre namespace!!!!!!!
Steps to start creating a project based Ogre:
1. Create an empty project.
2. In the project properities ( Make sure you are editing All Configurations):
a. OutputDirectory -> bin\$(ConfigurationName)
b. Intermediate Directory -> obj\$(ConfigurationName)
c. Debugging|Working Directory -> $(OutDir)
d. If for debug mode, Linker|Input -> OgreMain_d.lib OIS_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib ode.lib
e. If for release mode, Linker|Input -> OgreMain.lib OIS.lib CEGUIBase.lib OgreGUIRenderer.lib ode.lib
f. Default, vs will organize the source files in filters, but in the project directory, they are all together not in separate folders. To show it in separate folders, in the Options|Project and Solutions|VC++ Project Settings|Solution Explorer Mode -> Show all files. And then you need to manually add folders such as src and include.
g. Copy the debug/release files in the Ogre sdk to your project's debug/release folder
h. Copy the media folder in the Ogre sdk to your project folder, modify it if necessary
Next begin your work!
Really a tedious way, however, I tried one afternoon to create a wizard to automate this process and I failed. Maybe just do it manually it not that bad...
Monday, March 9, 2009
WPF & Ogre
An article about WPF & Ogre.
Blend the OGRE Graphics Engine into your WPF projects
Saturday, March 7, 2009
Thursday, March 5, 2009
Future
I saw this Einstein Quote this afternoon, I really like it.
I never think of the future. It comes soon enough.
Conversion between Utf-8 and GB2312
Some codes about conversion between utf-8 and gb2312 when handling different text format.
// ChineseCodeLib.h: interface for the CChineseCodeLib class.
//
//////////////////////////////////////////////////////////////////////
#include<string>
using namespace std;
/*
功?能?:?汉?字?GB2312与?UTF-8编?码?互?转?
作?者?:?litz
Email:mycro@163.com
参?考?:?吴?康?彬?先?生?的?文?章?《?UTF-8与?GB2312之?间?的?互?换?》?
http://www.vckbase.com/document/viewdoc/?id=1397
*/
#if !defined(__CCHINESECODELIB_H_)
#define __CCHINESECODELIB_H_
class CChineseCodeLib
{
public:
static void UTF_8ToGB2312(string& pOut,char *pText, int pLen);
static void GB2312ToUTF_8(string& pOut,char *pText, int pLen);
// Unicode 转?换?成?UTF-8
static void UnicodeToUTF_8(char* pOut,wchar_t* pText);
// GB2312 转?换?成? ?Unicode
static void Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer);
// 把?Unicode 转?换?成?GB2312
static void UnicodeToGB2312(char* pOut,unsigned short uData);
// 把?UTF-8转?换?成?Unicode
static void UTF_8ToUnicode(wchar_t* pOut,char* pText);
CChineseCodeLib();
virtual ~CChineseCodeLib();
};
#endif // !defined(__CCHINESECODELIB_H_)
///////////////////////////////////////////////////
// ChineseCodeLib.cpp: implementation of the CChineseCodeLib class.
//
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include "ChineseCodeLib.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CChineseCodeLib::CChineseCodeLib()
{
}
CChineseCodeLib::~CChineseCodeLib()
{
}
void CChineseCodeLib::UTF_8ToUnicode(wchar_t* pOut,char *pText)
{
char* uchar = (char *)pOut;
uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);
uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);
return;
}
void CChineseCodeLib::UnicodeToGB2312(char* pOut,unsigned short uData)
{
WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)&uData,1,pOut,sizeof(wchar_t),NULL,NULL);
return;
}
void CChineseCodeLib::Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer)
{
::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1);
return;
}
void CChineseCodeLib::UnicodeToUTF_8(char* pOut,wchar_t* pText)
{
// 注?意?wchar_t高?低?字?的?顺?序?,低?字?节?在?前?,?高?字?节?在?后?
char* pchar = (char *)pText;
pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[1] & 0xC0) >> 6);
pOut[2] = (0x80 | (pchar[0] & 0x3F));
return;
}
void CChineseCodeLib::GB2312ToUTF_8(string& pOut,char *pText, int pLen)
{
char buf[4];
char* rst = new char[pLen + (pLen >> 2) + 2];
memset(buf,0,4);
memset(rst,0,pLen + (pLen >> 2) + 2);
int i = 0;
int j = 0;
while(i < pLen)
{
//如?果?是?英?文?直?接?复?制?就?可?以?
if( *(pText + i) >= 0)
{
rst[j++] = pText[i++];
}
else
{
wchar_t pbuffer;
Gb2312ToUnicode(&pbuffer,pText+i);
UnicodeToUTF_8(buf,&pbuffer);
unsigned short int tmp = 0;
tmp = rst[j] = buf[0];
tmp = rst[j+1] = buf[1];
tmp = rst[j+2] = buf[2];
j += 3;
i += 2;
}
}
rst[j] = '\0';
//返?回?结?果?
pOut = rst;
delete []rst;
return;
}
void CChineseCodeLib::UTF_8ToGB2312(string &pOut, char *pText, int pLen)
{
char * newBuf = new char[pLen];
char Ctemp[4];
memset(Ctemp,0,4);
int i =0;
int j = 0;
while(i < pLen)
{
if(pText[i] > 0)
{
newBuf[j++] = pText[i++];
}
else
{
wchar_t Wtemp;
UTF_8ToUnicode(&Wtemp,pText + i);
UnicodeToGB2312(Ctemp,Wtemp);
newBuf[j] = Ctemp[0];
newBuf[j + 1] = Ctemp[1];
i += 3;
j += 2;
}
}
newBuf[j] = '\0';
pOut = newBuf;
delete []newBuf;
return;
}
///////////////////////////////////////////////////
//A test main program:
//Input utf.txt in the same folder with the source files.
//Output resutl.txt
// Decode1.cpp : Defines the entry point for the console application.
#include "ChineseCodeLib.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define LEN 100000
char str[LEN];
string res;
int main(int argc, char* argv[])
{
ifstream fin("utf.txt");
ofstream fout("result.txt");
while(!fin.eof())
{
fin.getline(str,LEN);
if(strlen(str)<10)
continue;
CChineseCodeLib::UTF_8ToGB2312(res,str,strlen(str));
//cout<<res<<endl;
fout<<res;
}
fin.close();
fout.close();
return 0;
}
From: http://blog.csdn.net/Mycro/archive/2005/12/06/544637.aspx
Wednesday, March 4, 2009
Camera
One thing about Ogre Cameras that is different from what you may expect is that you should only be using one Camera at a time (for now). That is, we do not create a Camera for viewing one portion of a scene, a second camera for viewing another portion of the scene and then enabling or disabling cameras based on what portion of the scene we want to display. Instead the way to accomplish this is to create SceneNodes which act as "camera holders". These SceneNodes simply sit in the scene and point at what the Camera might want to look at. When it is time to display a portion of the Scene, the Camera simply attaches itself to the appropriate SceneNode.
Create video from images
Using FFmpeg is good choice:
ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi
http://stackoverflow.com/questions/539257/working-way-to-make-video-from-images-in-c
Labelled representation
Vertices and control vertices.
Post Address
http://www.map.gov.sg/StreetMap/
http://www.best.sg/mash/sggeocoder.jsp
http://www.streetdirectory.com
http://www.singpost.com.sg/quick_services/index.htm
http://www.addressdoctor.com/lookup/default.aspx?lang=en&country=SGP
http://singapore.angloinfo.com/countries/singapore/postcodes.asp
| ||||||||||||||||||||
|
Streetdirectory.com Singapore : Its all about Singapore, Restaurants, Singapore Travel, Travel & Resorts, Singapore Images, Driving Directions, Jakarta Maps & Jakarta Travel Guide
|
School of Computing,
National University of Singapore,
As 6, #04-23,
11 Law Link,
Singapore 117589
School of Computing, NUS
Computing 1
13 Computing Drive
Singapore 117590
School of Computing
National University of Singapore
Computing 1. (Unit #03-68)
13 Computing Drive
Singapore 117417
Tuesday, March 3, 2009
Begin OGRE
After the SDK is installed, add "include" and "bin" directory of the SDK to the Visual Studio's VC++ Directories.
For each project, add "CEGUIBase.lib", "ode.lib", "OgreGUIRenderer.lib", "OgreMain.lib", "OIS.lib" and "ReferenceAppLayer_d.lib" to project's Link menu and Additional Dependencies. (Add all or add only the one you will use in your code.) Moreover, for the first 5 lib files, there is a version for debug: "CEGUIBase_d.lib", "OgreGUIRenderer_d.lib", "OgreMain_d.lib", "OIS_d.lib".
Missing a Configuration File or DLLs
If you try to launch your freshly built application but the program complains of missing DLLs or configuration files (*.cfg), then you probably did not copy them over from the OgreSDK folder. In Visual Studios, when you build your application in release mode, it puts the release executable in the [ProjectFolder]\bin\release folder, and the debug executable in the [ProjectFolder]\bin\debug folder. You must copy all the ".dll" and ".cfg" files over from the OgreSDK into the appropriate folders. That is, copy the files from [OgreSDK]\bin\release to [ProjectFolder]\bin\release and [OgreSDK]\bin\debug to [ProjectFolder]\bin\debug. You will also need to edit the resources.cfg file to point at the correct paths. See the next section for more information on this.
Also something in the "Resources.cfg" configuration file should be changed. However, I just copied the media folder to my project folder.
Cannot Launch the Application in Visual Studio
If you are using Visual Studio or Visual C++ to create the application and are having trouble launching it from the environment, the problem is most likely due to the debugger settings. If you press the play button (or go to the Start Debugging menu item) and you get an exception saying that a configuration file (*.cfg) cannot be found, then the Working Directory has probably not been set.
The exact instructions for fixing this will vary based on whichversion of Visual C++ you are using, so I cannot give you a direct walk through, but the basic steps should be the same. Right click on your project in the solution explorer (not the solution itself) and go to properties. Somewhere in the configuration properties should be options for "Debugging". In the debugging options there should be a field for "Working Directory". This should be set to the location that the executable file for your project is being placed.
If you are having trouble figuring out what to put there, try to mimic the "Command" field which should also be in the debugging options. For example, in Visual C++ 2003, the "Command" field should be something similar to "..\..\bin\$(ConfigurationName)\$(TargetFileName)". For the Working Directory, we need to remove the portion of the command which is the target file name (the executable). In this case, the working directory would be "..\..\bin\$(ConfigurationName)". The exact string you have to put there may vary based on your version of Visual C++ and on your build environment, so be sure to check what the Command field is before doing this. Be sure to change the Working Directory for both the Release and Debug configuration.
In Visual C++ 2005 it will probably be something different entirely. I've found the "..\..\bin\$(ConfigurationName)" directory a good thing to try first, if it still does not work you may have to play with it some, or consult some help from the Ogre forums.
The reason we have to do this is that Ogre expects certain files to be in the same directory as the executable, and without setting the working directory to be a directory with these files in it.
SceneNodes keep track of location and orientation for all of the objects attached to it. When you create an Entity, it is not rendered in the scene until you attach it to a SceneNode.In addition a SceneNode is not an object that is displayed on the screen. Only when you create a SceneNode and attach an Entity (or other object) to it is something actually displayed on the screen.
One major concept to note about SceneNodes is that a SceneNode's position is always relative to its parent SceneNode, and each SceneManager contains a root node to which all other SceneNodes are attached.
Independent
No reasons why I always get angry for her, even for a little thing. She said she was feeling uncomfortable every time I got angry. I'm sorry, I really love you.
I don't know why god gave me love after everything had been settled down. Maybe I won't go abroad for her. I don't know. I'm sorry I can't be with you and take care of you. I just want be happy, not work that tired everyday.
Maybe I am too selfish. No more than ten sentences come out of my mouth everyday. I just want to talk with somebody, somebody who won't be boring talking with me, somebody who won't can go on the chat when I have no word, somebody who won't laugh at me when I tell out what I am really thinking about, somebody who is willing to share everyday experience with me, somebody..., to make sure I can still talk.
Maybe it's true, there is nobody who will always follow your opinion, who will give your all his effort for you, except yourself. Everyone has his own life, own work and things to handle. None could be the perfect one in your mind.
Maybe the unhappy between us is because I am so dogmatic, want you just follow what I think is right.
I have heard one saying before, the young always do things hurt everyone including himself. I don't know why. Maybe now, I have tasted it. I know I am not happy to have no response to her messages. I know I'm eager to heard her voice. However, I just look at my phone and have no courage to dial the number. I just told myself if I receive another message from her, I will give in...
Maybe I really disturbed her so much. She has her modules, research work, ...
Monday, March 2, 2009
English phrase for Accommodation
studio apartment
Related phrases: studio apartment/flat loft studio apartment
- an apartment with a living space and a bathroom and a small kitchen
wordnet.princeton.edu/perl/webwn - A studio apartment (studio flat in the United Kingdom), or an efficiency apartment or bachelor style apartment, is a self-contained, small apartment, which combines living room, bedroom and Kitchenette into a single unit, barring a bathroom. ...
en.wikipedia.org/wiki/Studio_apartment - A small rental dwelling unit which combines living and bedroom spaces into one room (and, sometimes, kitchen space as well).
www.assignmentscanada.ca/definitions/realestateterms.html
公寓套房
Condominium 公寓
Sunday, March 1, 2009
OpenCV get pixel value!!!!
In OpenCV, using functions to get pixel values from an image, the pixel position must be carefully set!!!!!
Usually, the position we got from images or mouse click is in the form (x,y).
In the function cvGet2D(Iplimage *image, int idx0, int idx1), the first parameter is used to specify which image data to get. However, the second parameter is not corresponding to x. Instead, the second parameter is the first index of the image data array, from the above figure, the first index of the image data should be y not x!
That means to get the pixel data of the image at (x,y) using
cvGet2D(image, y, x);
not
cvGet2D(image, x, y);
Segment the Human Silhouette
In our project, we want to analyse the human silhouette. To well understand it, it is better to know each body part. But how to segment the silhouette to those meaningful body parts?
1. One way, we find that someone use Generalized Voronoi Diagram Decompostion to split the silhouette into distinct regions. http://www.mpi-inf.mpg.de/~theobalt/VisualHullTracking/index.html
Using this method, some small regions should be post-processed to form a meaningful human body part.
Elephant
############
###################
#########################
#############################
################################
############### ################
############ #############
########### ###########
###### ########## ######### ######
############## ######### ######### ##############
########################### ######## #################
########################## ##########################
######################### #########################
######################## ########################
###### ################## ########################
######################## #######################
####################### ########################
###################### #######################
####################### ######################
########### ####### ######## ###########
########### ###### ###### ###########
############ ###### ###### ############
############ ###### ##### ############
############ ###### ##### ###########
############ ##### ###### ###########
##### ###### ###### ###### ##### #####
##### ###### ###### ###### ##### ######
##### ###### ###### ###### ##### ######
##### ###### ###### ###### ##### ######
##### ###### ###### ###### ##### ######
##### ###### ###### ###### ###### ###### ##### ######
##### ###### ###### ######## ######### ###### ##### ######
##### ###### ###### ########## ######### ###### ##### #####
##### ###### ###### ########### ########## ###### ##### #####
##### ###### ####### ######### ######### ######## ###### #####
##################### ######## ######## ######################
###################### ######### ######### ######################
###################### ########## ########## ######################
###################### ########### ######### #######################
######## ############## ######### ######### ############# #########
####### ###### ###### ## ####### ####### ###### ####### #######
###### #### ###### ##### ###### ##### ######
##### #### ###### ###### ####### #### #####
##### ### ####### ###### ####### ### #####
#### ### ###### ###### ####### ## ####
### ####### ###### ####### ##
## ####### ####### ####### ##
################ ########
################ ########
################ ########
############### #########
############## ##########
############# ########
############ #######
########### ######
######## #######
###### ######
##### ######
##### ######
##### ######
##### ######
##### ######
##### ######
##### #############
##### ###############
##### ################
##### ##################
###### ################# ######
###### ###### ###### #########
###### ##### ###### #########
###### ########## ###### ####
###### ########### ####### ####
###### ########################## #######
###### ######################### ########
####### ####### ################## ########
###### ##### ################ #########
####### ##### ############# #########
####### #### ##### ##########
####### ### ##### ##########
####### ##### ##########
######## ##### ##########
######### ### ##########
######## #########
########## #######
########## ### ########
############# #####################
#######################################
######################################
###################################
######################## #######
################## ###