contract WaWlletTokenCrowdsale is WINCrowdsale {

  /* Maximum amount of tokens this crowdsale can sell. */
  uint public maximumSellableTokens;

  function WaWlletTokenCrowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens) WINCrowdsale(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) public {
    maximumSellableTokens = _maximumSellableTokens;
  }

  /**
   * Called from invest() to confirm if the curret investment does not break our cap rule.
   */
  function isBreakingCap(uint /*weiAmount*/, uint /*tokenAmount*/, uint /*weiRaisedTotal*/, uint tokensSoldTotal) public view returns (bool /*limitBroke*/) {
    return tokensSoldTotal > maximumSellableTokens;
  }

  function isCrowdsaleFull() public view returns (bool) {
    return tokensSold >= maximumSellableTokens;
  }

  /**
   * Dynamically create tokens and assign them to the investor.
   */
  function assignTokens(address receiver, uint tokenAmount) internal {
    MintableToken mintableToken = MintableToken(token);
    mintableToken.mint(receiver, tokenAmount);
  }
  
  /**
   * Dynamically create tokens and assign them to the investor.
   */
  /**
   * Allow direct contributions to this crowdsale.
   */
  function () public payable {
        invest(msg.sender);
  }
}
function isBreakingCap(uint /*weiAmount*/, uint /*tokenAmount*/, uint /*weiRaisedTotal*/, uint tokensSoldTotal) public view returns (bool /*limitBroke*/) {
  return tokensSoldTotal > maximumSellableTokens;
}

/**
 * Called from invest() to confirm if the curret investment does not break our cap rule.
 */