contract PausableToken is StandardToken, Pausable {

    address public allowedTransferWallet;

    constructor(address _allowedTransferWallet) public {
        allowedTransferWallet = _allowedTransferWallet;
    }

    modifier whenNotPausedOrOwnerOrAllowed() {
        require(!paused || msg.sender == owner || msg.sender == allowedTransferWallet);
        _;
    }

    function changeAllowTransferWallet(address _allowedTransferWallet) public onlyOwner {
        allowedTransferWallet = _allowedTransferWallet;
    }

    /**
    * @dev Transfer token for a specified address with pause feature for owner.
    * @dev Only applies when the transfer is allowed by the owner.
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transfer(address _to, uint256 _value) public whenNotPausedOrOwnerOrAllowed returns (bool) {
        return super.transfer(_to, _value);
    }

    /**
    * @dev Transfer tokens from one address to another with pause feature for owner.
    * @dev Only applies when the transfer is allowed by the owner.
    * @param _from address The address which you want to send tokens from
    * @param _to address The address which you want to transfer to
    * @param _value uint256 the amount of tokens to be transferred
    */
    function transferFrom(address _from, address _to, uint256 _value) public whenNotPausedOrOwnerOrAllowed returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }
}
function transferFrom(address _from, address _to, uint256 _value) public whenNotPausedOrOwnerOrAllowed returns (bool) {
    return super.transferFrom(_from, _to, _value);
}

/**
 * @dev Transfer tokens from one address to another with pause feature for owner.
 * @dev Only applies when the transfer is allowed by the owner.
 * @param _from address The address which you want to send tokens from
 * @param _to address The address which you want to transfer to
 * @param _value uint256 the amount of tokens to be transferred
 */