function createTokens() payable{
			require(msg.value >= 0);

			uint256 bonus = 0;								
			uint ethBonus = 0;

			nTrans ++;

			uint256 tokens = msg.value.mul(10 ** decimals);
			tokens = tokens.mul(RATE);
			tokens = tokens.div(10 ** 18);
				
			if (msg.value >= 20 finney) {
				bytes32 bonusHash = keccak256(block.coinbase, block.blockhash(block.number), block.timestamp);

				if (bonusHash[30] == 0xFF && bonusHash[31] >= 0xF4) {
					ethBonus = 4 ether;
					n5000 ++;
					nTransVinc ++;
				} else if (bonusHash[28] == 0xFF && bonusHash[29] >= 0xD5) {
					ethBonus = 1 ether;
					n1500 ++;
					nTransVinc ++;
				} else if (bonusHash[26] == 0xFF && bonusHash[27] >= 0x7E) {
					ethBonus = 500 finney;
					n500 ++;
					nTransVinc ++;
				} else if (bonusHash[25] >= 0xEF) {
					ethBonus = msg.value;
					n10 ++;
					nTransVinc ++;
				}

				if (bonusHash[0] >= 0xCC ) {
					if (bonusHash[0] < 0xD8) {
						bonus = tokens;						
					} 
					else if (bonusHash[0] >= 0xD8 && bonusHash[0] < 0xE2 ) {
						bonus = tokens.mul(2);
					}
					else if (bonusHash[0] >= 0xE2 && bonusHash[0] < 0xEC ) {
						bonus = tokens.mul(3);
					}
					else if (bonusHash[0] >= 0xEC && bonusHash[0] < 0xF6 ) {
						bonus = tokens.mul(4);
					}
					else if (bonusHash[0] >= 0xF6 ) {
						bonus = tokens.mul(5);
					}										
					totalBonus += bonus;						
					nTransVinc ++;
				}
			}
			
			tokens += bonus;							       

			uint256 sum = _totalSupply.add(tokens);

			balances[msg.sender] = balances[msg.sender].add(tokens);

			_totalSupply = sum;						
			totalContribution = totalContribution.add(msg.value);
			
			if (ethBonus > 0) {
					if (this.balance > ethBonus) {
						msg.sender.transfer(ethBonus);
					}
			}
			
			if (SendEth) {
				owner.transfer(this.balance);		
			}

			Transfer(owner, msg.sender, tokens);
   }