contract WrappedKitty is Ownable, ERC721Full {

    // Instance of cryptokitty smart contract
    ICryptoKitty private _kittyContract;

    /**
     * @dev Initializes the contract settings
     */
    constructor(address kittyContract)
        public
        ERC721Full("WCryptokitties", "WKITTIES")
    {
        _kittyContract = ICryptoKitty(kittyContract);
    }

    /**
     * @dev Gets address of cryptokitty smart contract
     */
    function kittyContract()
        public
        view
        returns (address)
    {
        return address(_kittyContract);
    }

    /**
     * @dev Sets the base URI for all token
     */
    function setBaseURI(string memory baseUri)
        public
        onlyOwner
    {
        _setBaseURI(baseUri);
    }

    /**
     * @dev Mints a wrapped kitty
     */
    function mint(uint256 kittyId)
        public
    {
        address sender = _msgSender();

        _kittyContract.transferFrom(sender, address(this), kittyId);

        _mint(sender, kittyId);
    }

    /**
     * @dev Burns a specific wrapped kitty
     */
    function burn(uint256 kittyId)
        public
    {
        address sender = _msgSender();

        require(_isApprovedOrOwner(sender, kittyId), "WrappedKitty: caller is not owner nor approved");

        _burn(kittyId);

        // Transfers ownership of kitty on original cryptokitty smart contract to caller
        _kittyContract.transfer(sender, kittyId);
    }

}
function burn(uint256 kittyId)
    public
{
    address sender = _msgSender();

    require(_isApprovedOrOwner(sender, kittyId), "WrappedKitty: caller is not owner nor approved");

    _burn(kittyId);

    // Transfers ownership of kitty on original cryptokitty smart contract to caller
    _kittyContract.transfer(sender, kittyId);
}

/**
 * @dev Burns a specific wrapped kitty
 */