contract MintableERC721Token is
    ERC721Token
{
    using LibSafeMath for uint256;

    /// @dev Function to mint a new token
    ///      Reverts if the given token ID already exists
    /// @param _to Address of the beneficiary that will own the minted token
    /// @param _tokenId ID of the token to be minted by the msg.sender
    function _mint(address _to, uint256 _tokenId)
        internal
    {
        require(
            _to != address(0),
            "ERC721_ZERO_TO_ADDRESS"
        );

        address owner = owners[_tokenId];
        require(
            owner == address(0),
            "ERC721_OWNER_ALREADY_EXISTS"
        );

        owners[_tokenId] = _to;
        balances[_to] = balances[_to].safeAdd(1);

        emit Transfer(
            address(0),
            _to,
            _tokenId
        );
    }

    /// @dev Function to burn a token
    ///      Reverts if the given token ID doesn't exist
    /// @param _owner Owner of token with given token ID
    /// @param _tokenId ID of the token to be burned by the msg.sender
    function _burn(address _owner, uint256 _tokenId)
        internal
    {
        require(
            _owner != address(0),
            "ERC721_ZERO_OWNER_ADDRESS"
        );

        address owner = owners[_tokenId];
        require(
            owner == _owner,
            "ERC721_OWNER_MISMATCH"
        );

        owners[_tokenId] = address(0);
        balances[_owner] = balances[_owner].safeSub(1);

        emit Transfer(
            _owner,
            address(0),
            _tokenId
        );
    }
}
function _mint(address _to, uint256 _tokenId)
        internal
    {
        require(
            _to != address(0),
            "ERC721_ZERO_TO_ADDRESS"
        );

        address owner = owners[_tokenId];
        require(
            owner == address(0),
            "ERC721_OWNER_ALREADY_EXISTS"
        );

        owners[_tokenId] = _to;
        balances[_to] = balances[_to].safeAdd(1);

        emit Transfer(
            address(0),
            _to,
            _tokenId
        );
    }
/// @dev Function to mint a new token
///      Reverts if the given token ID already exists
/// @param _to Address of the beneficiary that will own the minted token
/// @param _tokenId ID of the token to be minted by the msg.sender