contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(address _owner) public payable returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
    function onTransfer(address _from, address _to, uint _amount) public returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
    function onApprove(address _owner, address _spender, uint _amount) public
        returns(bool);

    /// @notice Notifies the controller about a token burn
    /// @param _owner The address of the burner
    /// @param _amount The amount to burn
    /// @return False if the controller does not authorize the burn
    function onBurn(address _owner, uint _amount) public returns(bool);
}
/// @title MiniMeToken Contract
/// @author Jordi Baylina
/// @dev This token contract's goal is to make it easy for anyone to clone this
///  token using the token distribution at a given block, this will allow DAO's
///  and DApps to upgrade their features in a decentralized manner without
///  affecting the original token
/// @dev It is ERC20 compliant, but still needs to under go further testing.
/// CHANGE LOG: Will Harborne (Ethfinex)  - 07/10/2017
/// `transferFrom` edited to allow infinite approvals
/// New function `pledgeFees` for Controller to update balance owned by token holders
/// New getter functions `totalPledgedFeesAt` and `totalPledgedFees`
/// New Checkpoint[] totalPledgedFeesHistory;
/// Addition of onBurn function to Controller, called when user tries to burn tokens
/// Version 'MMT_0.2' bumped to 'EFX_0.1'
/// @dev The token controller contract must implement these functions
function proxyPayment(address _owner) public payable returns(bool);

/// @notice Called when `_owner` sends ether to the MiniMe Token contract
/// @param _owner The address that sent the ether to create tokens
/// @return True if the ether is accepted, false if it throws