contract PCW is StandardToken {

    // metadata
    string public constant name = "Pu Chang Wine";
    string public constant symbol = "PCW";
    uint256 public constant decimals = 18;
    string public version = "1.0";
    uint256 public constant tokenCreationCap =  1 * (10**6) * 10**decimals;

    // fund accounts
    address public FundAccount;      // deposit address for Owner.

    // events
    event CreatePCW(address indexed _to, uint256 _value);

    // constructor
    constructor(
        address _FundAccount
    ) public
    {
        FundAccount = _FundAccount;
        totalSupply = tokenCreationCap;
        balances[FundAccount] = tokenCreationCap;    // deposit all TDT to Owner.
        emit CreatePCW(FundAccount, tokenCreationCap);    // logs deposit of Owner
    }

    /* Approve and then communicate the approved contract in a single tx */
    function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public
        returns (bool success) {    
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, address(this), _extraData);
            return true;
        }
    }
}
function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public
        returns (bool success) {    
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, address(this), _extraData);
            return true;
        }
    }
/* Approve and then communicate the approved contract in a single tx */