#include <stdlib.h>

#define total 10
#define colon 201
#define ligne 301

struct ghost {
	struct ghost * back;
	struct ghost * next;
	int une;		//nature of the particle , introduced by sand and water
	int clk;		//time of the particle , introduced by grass
	int tmp;		//temperature of the particle , introduced by fire
	int col;
	int row;
	int pix;
	struct ghost *down,*up,*left,*right,*dleft,*dright,*uleft,*uright;
	struct ghost *upriri,*upupriri,*upupri,*upup,*upuple,*upuplele,*uplele,*lele;
	struct ghost *dolele,*dodolele,*dodole,*dodo,*dodori,*dodoriri,*doriri,*riri;
} ;

//==========================================================================
//==========================================================================
//============================= ghost ======================================
//==========================================================================
//==========================================================================

struct ghost * head;
struct ghost * tail;
struct ghost * ici;

/*
void loop(void)
{
			ici = head;
			while (ici->next != NULL)
			{
				...

				ici = ici->next;
			}
}
*/


void creer (void)
{
	if (tail == 0)
	{
		head = (struct ghost *) malloc(sizeof(struct ghost));
		head->back = NULL;
		head->next = NULL;
		tail = head;
	}
	tail->next = (struct ghost *) malloc(sizeof(struct ghost));
	tail->next->back = tail;
	tail->next->next = NULL;
	tail = tail->next;
	return;
}

void detruire (struct ghost * mort)
{
	if ((mort->back == head)||(mort->next == head))
	{
		return;
	}
	if ((mort == tail)||(mort == head))
	{
		if (mort == tail)
		{
			tail = mort->back;
			mort->back->next = NULL;
			free(mort);
		}
		if (mort == head)
		{
			head = mort->next;
			mort->next->back = NULL;
			free(mort);
		}
	} else {
		mort->back->next = mort->next;
		mort->next->back = mort->back;
		free(mort);
	}
}
//==========================================================================
//==========================================================================
//============================ matrix ======================================
//==========================================================================
//==========================================================================
struct ghost * matrix[colon][ligne];

void join_the_matrix(struct ghost * aspirant)
{
		if (matrix[aspirant->col][aspirant->row] == NULL)
		{	matrix[aspirant->col][aspirant->row] = aspirant;	
		} else {
			detruire(aspirant);
		}
}

void touch_the_matrix(struct ghost * toucher)
{
	if (toucher->row > 1)
	{	toucher->down = matrix[toucher->col][toucher->row-1];
	} else {	toucher->down = toucher;	}
	if (toucher->row < 299)
	{	toucher->up = matrix[toucher->col][toucher->row+1];
	} else {	toucher->up = toucher;	}
	if (toucher->col > 1)
	{	toucher->left = matrix[toucher->col-1][toucher->row];
	} else {	toucher->left = toucher;	}
	if (toucher->col < 199)
	{	toucher->right = matrix[toucher->col+1][toucher->row];
	} else {	toucher->right = toucher;	}
	if ((toucher->row > 1)&&(toucher->col > 1))
	{	toucher->dleft = matrix[toucher->col-1][toucher->row-1];
	} else {	toucher->dleft = toucher;	}
	if ((toucher->row < 299)&&(toucher->col > 1))
	{	toucher->uleft = matrix[toucher->col-1][toucher->row+1];
	} else {	toucher->uleft = toucher;	}
	if ((toucher->row > 1)&&(toucher->col < 199))
	{	toucher->dright = matrix[toucher->col+1][toucher->row-1];
	} else {	toucher->dright = toucher;	}
	if ((toucher->row < 299)&&(toucher->col < 199))
	{	toucher->uright = matrix[toucher->col+1][toucher->row+1];
	} else {	toucher->uright = toucher;	}
}

void go_down(struct ghost * mover)
{	if (mover->down == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col][mover->row-1] = mover;
		mover->row -= 1;
	} else {matrix[mover->col][mover->row] = mover->down;
		matrix[mover->col][mover->row-1] = mover;
		mover->row -= 1;
		mover->down->row +=1;
	}
}

void go_up(struct ghost * mover)
{
	if (mover->up == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col][mover->row+1] = mover;
		mover->row += 1;
	} else {matrix[mover->col][mover->row] = mover->up;
		matrix[mover->col][mover->row+1] = mover;
		mover->row += 1;
		mover->up->row -=1;
	}
}

void go_left(struct ghost * mover)
{
	if (mover->left == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col-1][mover->row] = mover;
		mover->col -= 1;
	} else {
	}
}

void go_right(struct ghost * mover)
{
	if (mover->right == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col+1][mover->row] = mover;
		mover->col += 1;
	} else {
	}
}

void go_dleft(struct ghost * mover)
{
	if (mover->dleft == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col-1][mover->row-1] = mover;
		mover->row -= 1;
		mover->col -= 1;
	} else {
	}
}

void go_dright(struct ghost * mover)
{
	if (mover->dright == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col+1][mover->row-1] = mover;
		mover->row -= 1;
		mover->col += 1;
	} else {
	}
}

void go_uleft(struct ghost * mover)
{
	if (mover->uleft == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col-1][mover->row+1] = mover;
		mover->row += 1;
		mover->col -= 1;
	} else {
	}
}

void go_uright(struct ghost * mover)
{
	if (mover->uright == NULL)
	{	matrix[mover->col][mover->row] = NULL;
		matrix[mover->col+1][mover->row+1] = mover;
		mover->row += 1;
		mover->col += 1;
	} else {
	}
}

/*
void feel_the_matrix(struct ghost * felt)
{
//==========================================>90
	if (felt->row > 2)
	{		felt->dodo = matrix[felt->col][felt->row-2];
	} else {		felt->dodo = felt;	}
	if (felt->row < 298)
	{		felt->upup = matrix[felt->col][felt->row+2];
	} else {		felt->upup = felt;	}
	if (felt->col > 2)
	{		felt->lele = matrix[felt->col-2][felt->row];
	} else {		felt->lele = felt;	}
	if (felt->col < 198)
	{		felt->riri = matrix[felt->col+2][felt->row];
	} else {		felt->riri = felt;	}
//==========================================>45
	if ((felt->row > 2)&&(felt->col > 2))
	{		felt->dodolele = matrix[felt->col-2][felt->row-2];
	} else {		felt->dodolele = felt;	}
	if ((felt->row < 298)&&(felt->col > 2))
	{		felt->upuplele = matrix[felt->col-2][felt->row+2];
	} else {		felt->upuplele = felt;	}
	if ((felt->row > 2)&&(felt->col < 198))
	{		felt->dodoriri = matrix[felt->col+2][felt->row-2];
	} else {		felt->dodoriri = felt;	}
	if ((felt->row < 298)&&(felt->col < 198))
	{		felt->upupriri = matrix[felt->col+2][felt->row+2];
	} else {		felt->upupriri = felt;	}
//=========================================>22.5
	if ((felt->row > 1)&&(felt->col > 2))
	{		felt->dolele = matrix[felt->col-2][felt->row-1];
	} else {		felt->dolele = felt;	}
	if ((felt->row < 299)&&(felt->col > 2))
	{		felt->uplele = matrix[felt->col-2][felt->row+1];
	} else {		felt->uplele = felt;	}
	if ((felt->row > 1)&&(felt->col < 198))
	{		felt->doriri = matrix[felt->col+2][felt->row-1];
	} else {		felt->doriri = felt;	}
	if ((felt->row < 299)&&(felt->col < 198))
	{		felt->upriri = matrix[felt->col+2][felt->row+1];
	} else {		felt->upriri = felt;	}
//=========================================>67.5
	if ((felt->row > 2)&&(felt->col > 1))
	{		felt->dodole = matrix[felt->col-1][felt->row-2];
	} else {		felt->dodole = felt;	}
	if ((felt->row < 298)&&(felt->col > 1))
	{		felt->upuple = matrix[felt->col-1][felt->row+2];
	} else {		felt->upuple = felt;	}
	if ((felt->row > 2)&&(felt->col < 199))
	{		felt->dodori = matrix[felt->col+1][felt->row-2];
	} else {		felt->dodori = felt;	}
	if ((felt->row < 298)&&(felt->col < 199))
	{		felt->upupri = matrix[felt->col+1][felt->row+2];
	} else {		felt->upupri = felt;	}
}*/


//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//===========================  feng  =======================================
//===========================  shui  =======================================
//=========================== system =======================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================

void element(struct ghost * point)
{
	touch_the_matrix(point);

	switch (point->une)
	{
	//-------------------> earth
		//	the simple element
		case 1:
			if (point->down != point)	//it follow the gravity
			{if (point->down == NULL)	//only if nothing under
			{	go_down(point);
				break;		}}

            		if (point->dleft != point)	//it can go down left
			{if (point->dleft == NULL)
			{	go_dleft(point);
				break;		}}

            		if (point->dright != point)	//it can go down right
			{if (point->dright == NULL)
			{	go_dright(point);
				break;		}}
			point->clk += 1;
			break;
	//-------------------> water
		//	the tempered element
		case 2:
			if (point->down != point)	//if nothing under
			{if (point->down == NULL)	//it follow gravity
			{	go_down(point);
				break;		}}
                   
			if (point->left != point)	//else it go left
			{if (point->left == NULL)
			{	go_left(point);
				break;		}}
					
			if (point->right != point)	//or right
			{if (point->right == NULL)
			{	go_right(point);
				break;		}}

			if (point->up != point)		//in tha case it is
			{if (point->up != NULL)		//under sand particle
			{if (point->up->une == 1)	//it switch with it
			{	go_up(point);
				break;		}}}
			point->clk += 1;		
			break;
	//-------------------> wood
		//	;the variable element
		case 3:

			if (point->down != point)			//simple gravity code
			{if (point->down == NULL)			//it fall if nothing
			{	go_down(point);				//under
				point->clk = 0;
				break;
			} else {
				if (point->down->une == 1)		//if stable on sand then
				{	point->clk += 1;	}	//allow to grow

				if (point->down->une == 2)		//if on water !!
				{	if (point->dleft != point)	//algus formation code
					{if (point->dleft != NULL)	//to prevent floating
					{if (point->dleft->une == 3)
					{	break;		}}}
					if (point->dright != point)
					{if (point->dright != NULL)
					{if (point->dright->une == 3)
					{	break;		}}}
				go_down(point);	
				point->clk = 0;		
				break;	}

				if (point->down->une == 3)		//if stable on grass then
				{	point->clk += 1;	}	//allow to grow

				if (point->down->une == 4)		//if on metal
				{	point->une = 1;			//grass simply cant live
					point->pix = 0x00cccc00;	//then return to dust
					point->clk = 0;
					break;		}			
			}}

			if (point->up != point)				
			{if (point->up != NULL)				
			{
				if (point->up->une == 1)		//this make sure	
				{	go_up(point);			//that grass stay
					break;		}		//on the top of the sand

				if (point->up->une == 2)
				{
					if (point->clk >= 100)
					{	
						point->up->une = 3;
						point->up->clk = 0;
						point->up->pix = 0x0000ff00;
						point->clk = 0;
					}	
				}
			}}

			if ((point->left != point)&&(point->right != point))
			{
				if (point->left != NULL)		
				{if (point->left->une == 2)		
				{
					if (point->right == NULL)	//this code make that water 
					{	go_right(point);	//can wipe a part of the  
						break;		}	//grass if its under its way
					if (point->clk >= 100)
					{
						point->left->une = 3;
						point->left->clk = 0;
						point->left->pix = 0x0000ff00;
						point->clk = 0;
					}
				}}

				if (point->right != NULL)
				{if (point->right->une == 2)
				{
					if (point->left == NULL)
					{	go_left(point);
						break;		}
					if (point->clk >= 100)
					{
						point->right->une = 3;
						point->right->clk = 0;
						point->right->pix = 0x0000ff00;
						point->clk = 0;
					}
				}}
			}

			break;
	//-------------------> metal
		//	the stable element
		case 4:
			if (point->down != point)
			{if (point->down == NULL)
			{

				if (point->up != point)
				{if (point->up != NULL)
				{if (point->up->une == 4)
				{	break;		}}}
				if (point->uleft != point)
				{if (point->uleft != NULL)
				{if (point->uleft->une == 4)
				{	break;		}}}
				if (point->uright != point)
				{if (point->uright != NULL)
				{if (point->uright->une == 4)
				{	break;		}}}
				if (point->left != point)
				{if (point->left != NULL)
				{if (point->left->une == 4)
				{	break;		}}}
				if (point->right != point)
				{if (point->right != NULL)
				{if (point->right->une == 4)
				{	break;		}}}
				if (point->dleft != point)
				{if (point->dleft != NULL)
				{if (point->dleft->une == 4)
				{	break;		}}}
				if (point->dright != point)
				{if (point->dright != NULL)
				{if (point->dright->une == 4)
				{	break;		}}}
				if (point->down != point)
				{if (point->down != NULL)
				{if (point->down->une == 4)
				{	break;		}}}

				go_down(point);
				break;
			}}
			break;
	//------------------> fire
		//	the transformation element
		case 5:
				point->tmp += 7;
				point->clk += 1;
				if (point->clk == 1000)
				{	point->une = 1;			//that transform fire
					point->pix = 0x00007700;	//into cinder ... curious
					break;		
				}

				if (point->up != point)	
				{if (point->up != NULL)	
				{
					//if (point->up->une == 4)		//it distabilise iron
					//{	go_up(point);
					//	break;		}
					if (point->up->une == 3)		//grass transform
					{	if (point->tmp >= 450)
						{	point->up->une = 5;		//into fire...
							point->up->pix = 0x00ff0000;
						}
					}
					if (point->up->une == 2)		//reaction with water
					{	point->une = 1;			//that transform fire
						point->pix = 0x00007700;	//into cinder ... curious
						break;		}
					if (point->up->une == 1)
					{	point->une = 1;
						point->pix = 0x00007700;	//into cinder ... curious
						break;		}
				}}
				if (point->uleft != point)
				{if (point->uleft != NULL)
				{
					if (point->uleft->une == 3)
					{	if (point->tmp >= 450)
					{	point->uleft->une = 5;
						point->uleft->pix = 0x00ff0000;}
					}
					if (point->uleft->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->uright != point)
				{if (point->uright != NULL)
				{
					if (point->uright->une == 3)
					{	if (point->tmp >= 450)
					{	point->uright->une = 5;
						point->uright->pix = 0x00ff0000;}}
					if (point->uright->une == 2)
					{	point->une = 1;	
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->left != point)
				{if (point->left != NULL)
				{
					if (point->left->une == 3)
					{	if (point->tmp >= 450)
					{	point->left->une = 5;
						point->left->pix = 0x00ff0000;}}
					if (point->left->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->right != point)
				{if (point->right != NULL)
				{
					if (point->right->une == 3)
					{	if (point->tmp >= 450)
					{	point->right->une = 5;
						point->right->pix = 0x00ff0000;}}
					if (point->right->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->dleft != point)
				{if (point->dleft != NULL)
				{
					if (point->dleft->une == 3)
					{	if (point->tmp >= 450)
					{	point->dleft->une = 5;
						point->dleft->pix = 0x00ff0000;}}

					if (point->dleft->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->dright != point)
				{if (point->dright != NULL)
				{
					if (point->dright->une == 3)
					{	if (point->tmp >= 450)
					{	point->dright->une = 5;
						point->dright->pix = 0x00ff0000;}}
					if (point->dright->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;
						break;		}
				}}
				if (point->down != point)
				{if (point->down != NULL)
				{
					if (point->down->une == 3)
					{	if (point->tmp >= 450)
					{	point->down->une = 5;
						point->down->pix = 0x00ff0000;}}
					if (point->down->une == 2)
					{	point->une = 1;
						point->pix = 0x00007700;;
						break;		}
				} else {
					go_down(point);
					break;
				}}

			break;
	//----------------------------end
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//----------------------------here i test new weird element


		case 7:
			//---------------->repulse
			point->clk -= 1;
			if (point->clk <= 0)
			{
				//detruire(point);
				point->une = point->tmp;
				point->tmp = 0;
				break;
			}

			if (point->up != point)
			{if (point->up != NULL)
			{if (point->up->une ==7)
			{if (point->down != point)
			{if (point->down == NULL)
			{	go_down(point);		break;
			} else {if (point->dleft != point)
				{if (point->dleft == NULL)
				{	go_dleft(point);	break;
				} else {if (point->dright != point)
					{if (point->dright == NULL)
					{	go_dright(point);	break;
			}}}}}}}}}

			if (point->uleft != point)
			{if (point->uleft != NULL)
			{if (point->uleft->une ==7)
			{if (point->dright != point)
			{if (point->dright == NULL)
			{	go_dright(point);	break;
			} else {if (point->down != point)
				{if (point->down == NULL)
				{	go_down(point);		break;
				} else {if (point->right != point)
					{if (point->right == NULL)
					{	go_right(point);	break;
			}}}}}}}}}

			if (point->uright != point)
			{if (point->uright != NULL)
			{if (point->uright->une ==7)
			{if (point->dleft != point)
			{if (point->dleft == NULL)
			{	go_dleft(point);	break;
			} else {if (point->down != point)
				{if (point->down == NULL)
				{	go_down(point);		break;
				} else {if (point->left != point)
					{if (point->left == NULL)
					{	go_left(point);	break;
			}}}}}}}}}

			if (point->left != point)
			{if (point->left != NULL)
			{if (point->left->une ==7)
			{if (point->right != point)
			{if (point->right == NULL)
			{	go_right(point);	break;
			} else {if (point->dright != point)
				{if (point->dright == NULL)
				{	go_dright(point);		break;
				} else {if (point->uright != point)
					{if (point->uright == NULL)
					{	go_uright(point);	break;
			}}}}}}}}}

			if (point->right != point)
			{if (point->right != NULL)
			{if (point->right->une ==7)
			{if (point->left != point)
			{if (point->left == NULL)
			{	go_left(point);	break;
			} else {if (point->dleft != point)
				{if (point->dleft == NULL)
				{	go_dleft(point);		break;
				} else {if (point->uleft != point)
					{if (point->uleft == NULL)
					{	go_uleft(point);	break;
			}}}}}}}}}

			if (point->dleft != point)
			{if (point->dleft != NULL)
			{if (point->dleft->une ==7)
			{if (point->uright != point)
			{if (point->uright == NULL)
			{	go_uright(point);	break;
			} else {if (point->down != point)
				{if (point->down == NULL)
				{	go_down(point);		break;
				} else {if (point->right != point)
					{if (point->right == NULL)
					{	go_right(point);	break;
			}}}}}}}}}

			if (point->dright != point)
			{if (point->dright != NULL)
			{if (point->dright->une ==7)
			{if (point->uleft != point)
			{if (point->uleft == NULL)
			{	go_uleft(point);	break;
			} else {if (point->down != point)
				{if (point->down == NULL)
				{	go_down(point);		break;
				} else {if (point->left != point)
					{if (point->left == NULL)
					{	go_left(point);	break;
			}}}}}}}}}

			if (point->down != point)
			{if (point->down != NULL)
			{if (point->down->une ==7)
			{if (point->up != point)
			{if (point->up == NULL)
			{	go_up(point);		break;
			} else {if (point->uleft != point)
				{if (point->uleft == NULL)
				{	go_uleft(point);	break;
				} else {if (point->uright != point)
					{if (point->uright == NULL)
					{	go_uright(point);	break;
			}}}}}}}}}

			if (point->down != point)	//it follow the gravity
			{if (point->down == NULL)	//only if nothing under
			{	go_down(point);
				break;		}}

            		if (point->dleft != point)	//it can go down left
			{if (point->dleft == NULL)
			{	go_dleft(point);
				break;		}}

            		if (point->dright != point)	//it can go down right
			{if (point->dright == NULL)
			{	go_dright(point);
				break;		}}

			break;
			//==========tentative to magnetic powder
		/*case 9:
			feel_the_matrix(point);

			if (point->dodo!=point)
			{if (point->dodo!=NULL)
			{if (point->dodo->une==9)
			{if (point->down == NULL)
			{	go_down(point);
				break;		}}}}
			if (point->dodole!=point)
			{if (point->dodole!=NULL)
			{if (point->dodole->une==9)
			{if (point->down == NULL)
			{	go_down(point);
				break;		}}}}
			if (point->dodori!=point)
			{if (point->dodori!=NULL)
			{if (point->dodori->une==9)
			{if (point->down == NULL)
			{	go_down(point);
				break;		}}}}

			if (point->lele!=point)
			{if (point->lele!=NULL)
			{if (point->lele->une==9)
			{if (point->left == NULL)
			{	go_left(point);
				break;		}}}}
			if (point->dolele!=point)
			{if (point->dolele!=NULL)
			{if (point->dolele->une==9)
			{if (point->left == NULL)
			{	go_left(point);
				break;		}}}}
			if (point->uplele!=point)
			{if (point->uplele!=NULL)
			{if (point->uplele->une==9)
			{if (point->left == NULL)
			{	go_left(point);
				break;		}}}}

			if (point->riri!=point)
			{if (point->riri!=NULL)
			{if (point->riri->une==9)
			{if (point->right == NULL)
			{	go_right(point);
				break;		}}}}
			if (point->doriri!=point)
			{if (point->doriri!=NULL)
			{if (point->doriri->une==9)
			{if (point->right == NULL)
			{	go_right(point);
				break;		}}}}
			if (point->upriri!=point)
			{if (point->upriri!=NULL)
			{if (point->upriri->une==9)
			{if (point->right == NULL)
			{	go_right(point);
				break;		}}}}

			if (point->upup != point)
			{if (point->upup != NULL)
			{if (point->upup->une == 9)
			{if (point->up == NULL)
			{	go_up(point);
				break;		}}}}
			if (point->upuple != point)
			{if (point->upuple != NULL)
			{if (point->upuple->une == 9)
			{if (point->up == NULL)
			{	go_up(point);
				break;		}}}}
			if (point->upupri != point)
			{if (point->upupri != NULL)
			{if (point->upupri->une == 9)
			{if (point->up == NULL)
			{	go_up(point);
				break;		}}}}

			if (point->dodolele!=point)
			{if (point->dodolele!=NULL)
			{if (point->dodolele->une==9)
			{if (point->dleft == NULL)
			{	go_dleft(point);
				break;		}}}}
			if (point->dodoriri!=point)
			{if (point->dodoriri!=NULL)
			{if (point->dodoriri->une==9)
			{if (point->dright == NULL)
			{	go_dright(point);
				break;		}}}}
			if (point->upuplele != point)
			{if (point->upuplele != NULL)
			{if (point->upuplele->une == 9)
			{if (point->uleft == NULL)
			{	go_uleft(point);
				break;		}}}}
			if (point->upupriri != point)
			{if (point->upupriri != NULL)
			{if (point->upupriri->une == 9)
			{if (point->uright == NULL)
			{	go_uright(point);
				break;		}}}}

			if (point->down != point)		//graavity
			{if (point->down == NULL)
			{	go_down(point);	
				break;
			} else {
				if (point->down->une == 2)
				{	go_down(point);	
					break;	}
			}}
            		if (point->dleft != point)	//it can go down left
			{if (point->dleft == NULL)
			{	go_dleft(point);
				break;		}}
            		if (point->dright != point)	//it can go down right
			{if (point->dright == NULL)
			{	go_dright(point);
				break;		}}

			break;*/
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	//=========================================================================
	}
//=========================================================================
//===================== why do i have problem ? ============================
//=========================================================================

}

//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
//==========================================================================
