func: function buyTokens() public payable {
          require(state == State.Active &&
                  block.timestamp <= endAt &&
                  msg.value >= lowCapTxWei &&
                  msg.value <= hardCapTxWei &&
                  collectedWei + msg.value <= hardCapWei &&
                  whitelisted(msg.sender));
          uint iwei = msg.value;
          uint itokens = iwei * ETH_TOKEN_EXCHANGE_RATIO;
          token.icoInvestment(msg.sender, itokens); 
          collectedWei = collectedWei.add(iwei);
          ICOInvestment(msg.sender, iwei, itokens, 0);
          forwardFunds();
          touch();
      }