function buyTokens(address beneficiary) public payable {
      require (!isFinalized);
      require (block.timestamp >= FUNDING_START_TIMESTAMP);
      require (block.timestamp <= FUNDING_END_TIMESTAMP);
      require (msg.value != 0);
      require (beneficiary != 0x0);
      require (tx.gasprice <= GAS_PRICE_LIMIT);

      uint256 tokens = msg.value.mul(TOKEN_EXCHANGE_RATE); 
      uint256 checkedSupply = token.totalSupply().add(tokens);

      
      require (TOKEN_CREATION_CAP >= checkedSupply);

      
      
      require (tokens >= MIN_BUY_TOKENS || (TOKEN_CREATION_CAP.sub(token.totalSupply())) <= MIN_BUY_TOKENS);

      token.mint(beneficiary, tokens);
      CreateARCD(beneficiary, tokens);  

      forwardFunds();
    }