{
  "address": "0x1B20994C3894EcC862e26A9F4EC626A8489DD051",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_destination",
          "type": "address"
        },
        {
          "internalType": "contract IStrategy",
          "name": "_strategy",
          "type": "address"
        },
        {
          "internalType": "contract IReserve",
          "name": "_reserve",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IReserve",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IStrategy",
          "name": "strategy",
          "type": "address"
        }
      ],
      "name": "Deployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "DestinationSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Flushed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousManager",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newManager",
          "type": "address"
        }
      ],
      "name": "ManagerTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipOffered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IReserve",
          "name": "reserve",
          "type": "address"
        }
      ],
      "name": "ReserveSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IStrategy",
          "name": "strategy",
          "type": "address"
        }
      ],
      "name": "StrategySet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flush",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDestination",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserve",
      "outputs": [
        {
          "internalType": "contract IReserve",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStrategy",
      "outputs": [
        {
          "internalType": "contract IStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "manager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_destination",
          "type": "address"
        }
      ],
      "name": "setDestination",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newManager",
          "type": "address"
        }
      ],
      "name": "setManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IReserve",
          "name": "_reserve",
          "type": "address"
        }
      ],
      "name": "setReserve",
      "outputs": [
        {
          "internalType": "contract IReserve",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IStrategy",
          "name": "_strategy",
          "type": "address"
        }
      ],
      "name": "setStrategy",
      "outputs": [
        {
          "internalType": "contract IStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0x0a814241dfb79c1682accb7e947c0c5629dd1a5b30cd699ae9d27a7f3ea9ed12",
  "receipt": {
    "to": null,
    "from": "0x21E8fFC0108B0cbA465E26cA0a0EA3955475e9b2",
    "contractAddress": "0x1B20994C3894EcC862e26A9F4EC626A8489DD051",
    "transactionIndex": 1,
    "gasUsed": "915560",
    "logsBloom": "0x00000000000000001000000000000000000000000000800040800000080000000000000000000000000000000000000008000000000000000000000000000000000020000000000000000000000000000001200000000000000000000000000000000000020000000000000000000a00200000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000004020000000000002000000000000000000000000000000400001000020000000000000000000000000000020000002000000000000000000000000000000000000800000000000000000000000",
    "blockHash": "0xb976657c44c338df0533f4af8429fa29cfd548aa3d4ea21a414226041caf305f",
    "transactionHash": "0x0a814241dfb79c1682accb7e947c0c5629dd1a5b30cd699ae9d27a7f3ea9ed12",
    "logs": [
      {
        "transactionIndex": 1,
        "blockNumber": 8501340,
        "transactionHash": "0x0a814241dfb79c1682accb7e947c0c5629dd1a5b30cd699ae9d27a7f3ea9ed12",
        "address": "0x1B20994C3894EcC862e26A9F4EC626A8489DD051",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x00000000000000000000000021e8ffc0108b0cba465e26ca0a0ea3955475e9b2"
        ],
        "data": "0x",
        "logIndex": 5,
        "blockHash": "0xb976657c44c338df0533f4af8429fa29cfd548aa3d4ea21a414226041caf305f"
      },
      {
        "transactionIndex": 1,
        "blockNumber": 8501340,
        "transactionHash": "0x0a814241dfb79c1682accb7e947c0c5629dd1a5b30cd699ae9d27a7f3ea9ed12",
        "address": "0x1B20994C3894EcC862e26A9F4EC626A8489DD051",
        "topics": [
          "0xc95935a66d15e0da5e412aca0ad27ae891d20b2fb91cf3994b6a3bf2b8178082",
          "0x00000000000000000000000083332f908f403ce795d90f677ce3f382fe73f3d1",
          "0x000000000000000000000000f04e5b81e69cdc3c08bc5da64ca053ad46a3d029",
          "0x000000000000000000000000a30cb2a488dc616f060a54ee7971d0bd832547ec"
        ],
        "data": "0x",
        "logIndex": 6,
        "blockHash": "0xb976657c44c338df0533f4af8429fa29cfd548aa3d4ea21a414226041caf305f"
      }
    ],
    "blockNumber": 8501340,
    "cumulativeGasUsed": "1040199",
    "status": 1,
    "byzantium": true
  },
  "args": [
    "0x21E8fFC0108B0cbA465E26cA0a0EA3955475e9b2",
    "0x83332F908f403ce795D90f677cE3f382FE73f3D1",
    "0xA30cB2A488dc616F060a54Ee7971d0bD832547Ec",
    "0xf04E5B81e69Cdc3c08BC5Da64ca053AD46a3d029"
  ],
  "solcInputHash": "8de2730cf5e263103c2ac52c02e7eaa7",
  "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"contract IStrategy\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"contract IReserve\",\"name\":\"_reserve\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IReserve\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"Deployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"DestinationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Flushed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"ManagerTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IReserve\",\"name\":\"reserve\",\"type\":\"address\"}],\"name\":\"ReserveSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"StrategySet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flush\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserve\",\"outputs\":[{\"internalType\":\"contract IReserve\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStrategy\",\"outputs\":[{\"internalType\":\"contract IStrategy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"}],\"name\":\"setDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newManager\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IReserve\",\"name\":\"_reserve\",\"type\":\"address\"}],\"name\":\"setReserve\",\"outputs\":[{\"internalType\":\"contract IReserve\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IStrategy\",\"name\":\"_strategy\",\"type\":\"address\"}],\"name\":\"setStrategy\",\"outputs\":[{\"internalType\":\"contract IStrategy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc Team\",\"events\":{\"Deployed(address,address,address)\":{\"params\":{\"destination\":\"Destination address\",\"reserve\":\"Strategy address\",\"strategy\":\"Reserve address\"}}},\"kind\":\"dev\",\"methods\":{\"claimOwnership()\":{\"details\":\"This function is only callable by the `_pendingOwner`.\"},\"constructor\":{\"params\":{\"_destination\":\"Destination address\",\"_owner\":\"Prize Flush owner address\",\"_reserve\":\"Reserve address\",\"_strategy\":\"Strategy address\"}},\"flush()\":{\"details\":\"Captures interest, checkpoint data and transfers tokens to final destination.\",\"returns\":{\"_0\":\"True if operation is successful.\"}},\"manager()\":{\"returns\":{\"_0\":\"Current `_manager` address.\"}},\"pendingOwner()\":{\"returns\":{\"_0\":\"Current `_pendingOwner` address.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setManager(address)\":{\"details\":\"Throws if called by any account other than the owner.\",\"params\":{\"_newManager\":\"New _manager address.\"},\"returns\":{\"_0\":\"Boolean to indicate if the operation was successful or not.\"}},\"transferOwnership(address)\":{\"params\":{\"_newOwner\":\"Address to transfer ownership to.\"}}},\"stateVariables\":{\"destination\":{\"details\":\"Should be set to the PrizeDistributor address.\"}},\"title\":\"PoolTogether V4 PrizeFlush\",\"version\":1},\"userdoc\":{\"events\":{\"Deployed(address,address,address)\":{\"notice\":\"Emitted when contract has been deployed.\"},\"DestinationSet(address)\":{\"notice\":\"Emit when destination is set.\"},\"Flushed(address,uint256)\":{\"notice\":\"Emit when the flush function has executed.\"},\"ReserveSet(address)\":{\"notice\":\"Emit when reserve is set.\"},\"StrategySet(address)\":{\"notice\":\"Emit when strategy is set.\"}},\"kind\":\"user\",\"methods\":{\"claimOwnership()\":{\"notice\":\"Allows the `_pendingOwner` address to finalize the transfer.\"},\"constructor\":{\"notice\":\"Deploy Prize Flush.\"},\"flush()\":{\"notice\":\"Migrate interest from PrizePool to PrizeDistributor in a single transaction.\"},\"getDestination()\":{\"notice\":\"Read global destination variable.\"},\"getReserve()\":{\"notice\":\"Read global reserve variable.\"},\"getStrategy()\":{\"notice\":\"Read global strategy variable.\"},\"manager()\":{\"notice\":\"Gets current `_manager`.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"notice\":\"Gets current `_pendingOwner`.\"},\"renounceOwnership()\":{\"notice\":\"Renounce ownership of the contract.\"},\"setDestination(address)\":{\"notice\":\"Set global destination variable.\"},\"setManager(address)\":{\"notice\":\"Set or change of manager.\"},\"setReserve(address)\":{\"notice\":\"Set global reserve variable.\"},\"setStrategy(address)\":{\"notice\":\"Set global strategy variable.\"},\"transferOwnership(address)\":{\"notice\":\"Allows current owner to set the `_pendingOwner` address.\"}},\"notice\":\"The PrizeFlush contract helps capture interest from the PrizePool and move collected funds to a designated PrizeDistributor contract. When deployed, the destination, reserve and strategy addresses are set and used as static parameters during every \\\"flush\\\" execution. The parameters can be reset by the Owner if necessary.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@pooltogether/v4-periphery/contracts/PrizeFlush.sol\":\"PrizeFlush\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@pooltogether/owner-manager-contracts/contracts/Manageable.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Ownable.sol\\\";\\n\\n/**\\n * @title Abstract manageable contract that can be inherited by other contracts\\n * @notice Contract module based on Ownable which provides a basic access control mechanism, where\\n * there is an owner and a manager that can be granted exclusive access to specific functions.\\n *\\n * By default, the owner is the deployer of the contract.\\n *\\n * The owner account is set through a two steps process.\\n *      1. The current `owner` calls {transferOwnership} to set a `pendingOwner`\\n *      2. The `pendingOwner` calls {acceptOwnership} to accept the ownership transfer\\n *\\n * The manager account needs to be set using {setManager}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyManager`, which can be applied to your functions to restrict their use to\\n * the manager.\\n */\\nabstract contract Manageable is Ownable {\\n    address private _manager;\\n\\n    /**\\n     * @dev Emitted when `_manager` has been changed.\\n     * @param previousManager previous `_manager` address.\\n     * @param newManager new `_manager` address.\\n     */\\n    event ManagerTransferred(address indexed previousManager, address indexed newManager);\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Gets current `_manager`.\\n     * @return Current `_manager` address.\\n     */\\n    function manager() public view virtual returns (address) {\\n        return _manager;\\n    }\\n\\n    /**\\n     * @notice Set or change of manager.\\n     * @dev Throws if called by any account other than the owner.\\n     * @param _newManager New _manager address.\\n     * @return Boolean to indicate if the operation was successful or not.\\n     */\\n    function setManager(address _newManager) external onlyOwner returns (bool) {\\n        return _setManager(_newManager);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Set or change of manager.\\n     * @param _newManager New _manager address.\\n     * @return Boolean to indicate if the operation was successful or not.\\n     */\\n    function _setManager(address _newManager) private returns (bool) {\\n        address _previousManager = _manager;\\n\\n        require(_newManager != _previousManager, \\\"Manageable/existing-manager-address\\\");\\n\\n        _manager = _newManager;\\n\\n        emit ManagerTransferred(_previousManager, _newManager);\\n        return true;\\n    }\\n\\n    /* ============ Modifier Functions ============ */\\n\\n    /**\\n     * @dev Throws if called by any account other than the manager.\\n     */\\n    modifier onlyManager() {\\n        require(manager() == msg.sender, \\\"Manageable/caller-not-manager\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the manager or the owner.\\n     */\\n    modifier onlyManagerOrOwner() {\\n        require(manager() == msg.sender || owner() == msg.sender, \\\"Manageable/caller-not-manager-or-owner\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xdd8ac008df192c6aa4df83e7037ab090970fda38e1f9fd712bc0ab5e0485fc04\",\"license\":\"GPL-3.0\"},\"@pooltogether/owner-manager-contracts/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Abstract ownable contract that can be inherited by other contracts\\n * @notice Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner is the deployer of the contract.\\n *\\n * The owner account is set through a two steps process.\\n *      1. The current `owner` calls {transferOwnership} to set a `pendingOwner`\\n *      2. The `pendingOwner` calls {acceptOwnership} to accept the ownership transfer\\n *\\n * The manager account needs to be set using {setManager}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable {\\n    address private _owner;\\n    address private _pendingOwner;\\n\\n    /**\\n     * @dev Emitted when `_pendingOwner` has been changed.\\n     * @param pendingOwner new `_pendingOwner` address.\\n     */\\n    event OwnershipOffered(address indexed pendingOwner);\\n\\n    /**\\n     * @dev Emitted when `_owner` has been changed.\\n     * @param previousOwner previous `_owner` address.\\n     * @param newOwner new `_owner` address.\\n     */\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /* ============ Deploy ============ */\\n\\n    /**\\n     * @notice Initializes the contract setting `_initialOwner` as the initial owner.\\n     * @param _initialOwner Initial owner of the contract.\\n     */\\n    constructor(address _initialOwner) {\\n        _setOwner(_initialOwner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @notice Gets current `_pendingOwner`.\\n     * @return Current `_pendingOwner` address.\\n     */\\n    function pendingOwner() external view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @notice Renounce ownership of the contract.\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() external virtual onlyOwner {\\n        _setOwner(address(0));\\n    }\\n\\n    /**\\n    * @notice Allows current owner to set the `_pendingOwner` address.\\n    * @param _newOwner Address to transfer ownership to.\\n    */\\n    function transferOwnership(address _newOwner) external onlyOwner {\\n        require(_newOwner != address(0), \\\"Ownable/pendingOwner-not-zero-address\\\");\\n\\n        _pendingOwner = _newOwner;\\n\\n        emit OwnershipOffered(_newOwner);\\n    }\\n\\n    /**\\n    * @notice Allows the `_pendingOwner` address to finalize the transfer.\\n    * @dev This function is only callable by the `_pendingOwner`.\\n    */\\n    function claimOwnership() external onlyPendingOwner {\\n        _setOwner(_pendingOwner);\\n        _pendingOwner = address(0);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Internal function to set the `_owner` of the contract.\\n     * @param _newOwner New `_owner` address.\\n     */\\n    function _setOwner(address _newOwner) private {\\n        address _oldOwner = _owner;\\n        _owner = _newOwner;\\n        emit OwnershipTransferred(_oldOwner, _newOwner);\\n    }\\n\\n    /* ============ Modifier Functions ============ */\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(owner() == msg.sender, \\\"Ownable/caller-not-owner\\\");\\n        _;\\n    }\\n\\n    /**\\n    * @dev Throws if called by any account other than the `pendingOwner`.\\n    */\\n    modifier onlyPendingOwner() {\\n        require(msg.sender == _pendingOwner, \\\"Ownable/caller-not-pendingOwner\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfd0fd374812c8af45f2633cc7cc4811ccb7bad0a3902a43aded35939eb4a00d1\",\"license\":\"GPL-3.0\"},\"@pooltogether/v4-core/contracts/interfaces/IReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity 0.8.6;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IReserve {\\n    /**\\n     * @notice Emit when checkpoint is created.\\n     * @param reserveAccumulated  Total depsosited\\n     * @param withdrawAccumulated Total withdrawn\\n     */\\n\\n    event Checkpoint(uint256 reserveAccumulated, uint256 withdrawAccumulated);\\n    /**\\n     * @notice Emit when the withdrawTo function has executed.\\n     * @param recipient Address receiving funds\\n     * @param amount    Amount of tokens transfered.\\n     */\\n    event Withdrawn(address indexed recipient, uint256 amount);\\n\\n    /**\\n     * @notice Create observation checkpoint in ring bufferr.\\n     * @dev    Calculates total desposited tokens since last checkpoint and creates new accumulator checkpoint.\\n     */\\n    function checkpoint() external;\\n\\n    /**\\n     * @notice Read global token value.\\n     * @return IERC20\\n     */\\n    function getToken() external view returns (IERC20);\\n\\n    /**\\n     * @notice Calculate token accumulation beween timestamp range.\\n     * @dev    Search the ring buffer for two checkpoint observations and diffs accumulator amount.\\n     * @param startTimestamp Account address\\n     * @param endTimestamp   Transfer amount\\n     */\\n    function getReserveAccumulatedBetween(uint32 startTimestamp, uint32 endTimestamp)\\n        external\\n        returns (uint224);\\n\\n    /**\\n     * @notice Transfer Reserve token balance to recipient address.\\n     * @dev    Creates checkpoint before token transfer. Increments withdrawAccumulator with amount.\\n     * @param recipient Account address\\n     * @param amount    Transfer amount\\n     */\\n    function withdrawTo(address recipient, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x630c99a29c1df33cf2cf9492ea8640e875fa6cbb46c53a9d1ce935567589fef6\",\"license\":\"GPL-3.0\"},\"@pooltogether/v4-core/contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity 0.8.6;\\n\\ninterface IStrategy {\\n    /**\\n     * @notice Emit when a strategy captures award amount from PrizePool.\\n     * @param totalPrizeCaptured  Total prize captured from the PrizePool\\n     */\\n    event Distributed(uint256 totalPrizeCaptured);\\n\\n    /**\\n     * @notice Capture the award balance and distribute to prize splits.\\n     * @dev    Permissionless function to initialize distribution of interst\\n     * @return Prize captured from PrizePool\\n     */\\n    function distribute() external returns (uint256);\\n}\\n\",\"keccak256\":\"0x3c30617be7a8c311c320fe3b50c77c4270333ddcfe5b01822fcbe85e2db4623e\",\"license\":\"GPL-3.0\"},\"@pooltogether/v4-periphery/contracts/PrizeFlush.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity 0.8.6;\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@pooltogether/owner-manager-contracts/contracts/Manageable.sol\\\";\\n\\nimport \\\"./interfaces/IPrizeFlush.sol\\\";\\n\\n/**\\n * @title  PoolTogether V4 PrizeFlush\\n * @author PoolTogether Inc Team\\n * @notice The PrizeFlush contract helps capture interest from the PrizePool and move collected funds\\n           to a designated PrizeDistributor contract. When deployed, the destination, reserve and strategy\\n           addresses are set and used as static parameters during every \\\"flush\\\" execution. The parameters can be\\n           reset by the Owner if necessary.\\n */\\ncontract PrizeFlush is IPrizeFlush, Manageable {\\n    /**\\n     * @notice Destination address for captured interest.\\n     * @dev Should be set to the PrizeDistributor address.\\n     */\\n    address internal destination;\\n\\n    /// @notice Reserve address.\\n    IReserve internal reserve;\\n\\n    /// @notice Strategy address.\\n    IStrategy internal strategy;\\n\\n    /**\\n     * @notice Emitted when contract has been deployed.\\n     * @param destination Destination address\\n     * @param reserve Strategy address\\n     * @param strategy Reserve address\\n     *\\n     */\\n    event Deployed(\\n        address indexed destination,\\n        IReserve indexed reserve,\\n        IStrategy indexed strategy\\n    );\\n\\n    /* ============ Constructor ============ */\\n\\n    /**\\n     * @notice Deploy Prize Flush.\\n     * @param _owner Prize Flush owner address\\n     * @param _destination Destination address\\n     * @param _strategy Strategy address\\n     * @param _reserve Reserve address\\n     *\\n     */\\n    constructor(\\n        address _owner,\\n        address _destination,\\n        IStrategy _strategy,\\n        IReserve _reserve\\n    ) Ownable(_owner) {\\n        _setDestination(_destination);\\n        _setReserve(_reserve);\\n        _setStrategy(_strategy);\\n\\n        emit Deployed(_destination, _reserve, _strategy);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /// @inheritdoc IPrizeFlush\\n    function getDestination() external view override returns (address) {\\n        return destination;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function getReserve() external view override returns (IReserve) {\\n        return reserve;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function getStrategy() external view override returns (IStrategy) {\\n        return strategy;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function setDestination(address _destination) external override onlyOwner returns (address) {\\n        _setDestination(_destination);\\n        emit DestinationSet(_destination);\\n        return _destination;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function setReserve(IReserve _reserve) external override onlyOwner returns (IReserve) {\\n        _setReserve(_reserve);\\n        emit ReserveSet(_reserve);\\n        return _reserve;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function setStrategy(IStrategy _strategy) external override onlyOwner returns (IStrategy) {\\n        _setStrategy(_strategy);\\n        emit StrategySet(_strategy);\\n        return _strategy;\\n    }\\n\\n    /// @inheritdoc IPrizeFlush\\n    function flush() external override onlyManagerOrOwner returns (bool) {\\n        // Captures interest from PrizePool and distributes funds using a PrizeSplitStrategy.\\n        strategy.distribute();\\n\\n        // After funds are distributed using PrizeSplitStrategy we EXPECT funds to be located in the Reserve.\\n        IReserve _reserve = reserve;\\n        IERC20 _token = _reserve.getToken();\\n        uint256 _amount = _token.balanceOf(address(_reserve));\\n\\n        // IF the tokens were succesfully moved to the Reserve, now move them to the destination (PrizeDistributor) address.\\n        if (_amount > 0) {\\n            address _destination = destination;\\n\\n            // Create checkpoint and transfers new total balance to PrizeDistributor\\n            _reserve.withdrawTo(_destination, _amount);\\n\\n            emit Flushed(_destination, _amount);\\n            return true;\\n        }\\n\\n        return false;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Set global destination variable.\\n     * @dev `_destination` cannot be the zero address.\\n     * @param _destination Destination address\\n     */\\n    function _setDestination(address _destination) internal {\\n        require(_destination != address(0), \\\"Flush/destination-not-zero-address\\\");\\n        destination = _destination;\\n    }\\n\\n    /**\\n     * @notice Set global reserve variable.\\n     * @dev `_reserve` cannot be the zero address.\\n     * @param _reserve Reserve address\\n     */\\n    function _setReserve(IReserve _reserve) internal {\\n        require(address(_reserve) != address(0), \\\"Flush/reserve-not-zero-address\\\");\\n        reserve = _reserve;\\n    }\\n\\n    /**\\n     * @notice Set global strategy variable.\\n     * @dev `_strategy` cannot be the zero address.\\n     * @param _strategy Strategy address\\n     */\\n    function _setStrategy(IStrategy _strategy) internal {\\n        require(address(_strategy) != address(0), \\\"Flush/strategy-not-zero-address\\\");\\n        strategy = _strategy;\\n    }\\n}\\n\",\"keccak256\":\"0x3b4401de86bcf4eb541439e2c5efe60d83dddc07dee6162ade9562a2b02ab066\",\"license\":\"GPL-3.0\"},\"@pooltogether/v4-periphery/contracts/interfaces/IPrizeFlush.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity 0.8.6;\\n\\nimport \\\"@pooltogether/v4-core/contracts/interfaces/IReserve.sol\\\";\\nimport \\\"@pooltogether/v4-core/contracts/interfaces/IStrategy.sol\\\";\\n\\ninterface IPrizeFlush {\\n    /**\\n     * @notice Emit when the flush function has executed.\\n     * @param destination Address receiving funds\\n     * @param amount      Amount of tokens transferred\\n     */\\n    event Flushed(address indexed destination, uint256 amount);\\n\\n    /**\\n     * @notice Emit when destination is set.\\n     * @param destination Destination address\\n     */\\n    event DestinationSet(address destination);\\n\\n    /**\\n     * @notice Emit when strategy is set.\\n     * @param strategy Strategy address\\n     */\\n    event StrategySet(IStrategy strategy);\\n\\n    /**\\n     * @notice Emit when reserve is set.\\n     * @param reserve Reserve address\\n     */\\n    event ReserveSet(IReserve reserve);\\n\\n    /// @notice Read global destination variable.\\n    function getDestination() external view returns (address);\\n\\n    /// @notice Read global reserve variable.\\n    function getReserve() external view returns (IReserve);\\n\\n    /// @notice Read global strategy variable.\\n    function getStrategy() external view returns (IStrategy);\\n\\n    /// @notice Set global destination variable.\\n    function setDestination(address _destination) external returns (address);\\n\\n    /// @notice Set global reserve variable.\\n    function setReserve(IReserve _reserve) external returns (IReserve);\\n\\n    /// @notice Set global strategy variable.\\n    function setStrategy(IStrategy _strategy) external returns (IStrategy);\\n\\n    /**\\n     * @notice Migrate interest from PrizePool to PrizeDistributor in a single transaction.\\n     * @dev    Captures interest, checkpoint data and transfers tokens to final destination.\\n     * @return True if operation is successful.\\n     */\\n    function flush() external returns (bool);\\n}\\n\",\"keccak256\":\"0x47e8eeec8e793380f0425e73146ef41db37bec21997bdf06e5016d8ff049de57\",\"license\":\"GPL-3.0\"}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620010cf380380620010cf833981016040819052620000349162000283565b836200004081620000b6565b506200004c8362000106565b62000057816200018f565b620000628262000209565b816001600160a01b0316816001600160a01b0316846001600160a01b03167fc95935a66d15e0da5e412aca0ad27ae891d20b2fb91cf3994b6a3bf2b817808260405160405180910390a45050505062000304565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166200016d5760405162461bcd60e51b815260206004820152602260248201527f466c7573682f64657374696e6174696f6e2d6e6f742d7a65726f2d6164647265604482015261737360f01b60648201526084015b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116620001e75760405162461bcd60e51b815260206004820152601e60248201527f466c7573682f726573657276652d6e6f742d7a65726f2d616464726573730000604482015260640162000164565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116620002615760405162461bcd60e51b815260206004820152601f60248201527f466c7573682f73747261746567792d6e6f742d7a65726f2d6164647265737300604482015260640162000164565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080608085870312156200029a57600080fd5b8451620002a781620002eb565b6020860151909450620002ba81620002eb565b6040860151909350620002cd81620002eb565b6060860151909250620002e081620002eb565b939692955090935050565b6001600160a01b03811681146200030157600080fd5b50565b610dbb80620003146000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636b9f96ea1161008c5780639cecc80a116100665780639cecc80a146101ad578063d0ebdbe7146101c0578063e30c3978146101d3578063f2fde38b146101e457600080fd5b80636b9f96ea1461017c578063715018a6146101945780638da5cb5b1461019c57600080fd5b806333a100ca116100c857806333a100ca1461013d578063481c6a75146101505780634e71e0c81461016157806359bf5d391461016b57600080fd5b806307da0603146100ef5780630a0a05e61461011957806316ad95421461012c575b600080fd5b6005546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc610127366004610d13565b6101f7565b6003546001600160a01b03166100fc565b6100fc61014b366004610d13565b6102b1565b6002546001600160a01b03166100fc565b61016961035e565b005b6004546001600160a01b03166100fc565b6101846103ec565b6040519015158152602001610110565b61016961073d565b6000546001600160a01b03166100fc565b6100fc6101bb366004610d13565b6107b2565b6101846101ce366004610d13565b61085f565b6001546001600160a01b03166100fc565b6101696101f2366004610d13565b6108d9565b60003361020c6000546001600160a01b031690565b6001600160a01b0316146102675760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064015b60405180910390fd5b61027082610a15565b6040516001600160a01b03831681527f02b0c42ff9b0e5574a8fb272d0d3912de57184ca7a14f102643fb371a89bc213906020015b60405180910390a15090565b6000336102c66000546001600160a01b031690565b6001600160a01b03161461031c5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b61032582610ac0565b6040516001600160a01b03831681527fe70d79dad95c835bdd87e9cf4665651c9e5abb3b756e4fd2bf45f29c95c3aa40906020016102a5565b6001546001600160a01b031633146103b85760405162461bcd60e51b815260206004820152601f60248201527f4f776e61626c652f63616c6c65722d6e6f742d70656e64696e674f776e657200604482015260640161025e565b6001546103cd906001600160a01b0316610b45565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000336104016002546001600160a01b031690565b6001600160a01b0316148061042f5750336104246000546001600160a01b031690565b6001600160a01b0316145b6104a15760405162461bcd60e51b815260206004820152602660248201527f4d616e61676561626c652f63616c6c65722d6e6f742d6d616e616765722d6f7260448201527f2d6f776e65720000000000000000000000000000000000000000000000000000606482015260840161025e565b600560009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104f157600080fd5b505af1158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190610d54565b5060048054604080517f21df0da700000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169260009284926321df0da79281810192602092909190829003018186803b15801561058c57600080fd5b505afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190610d37565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192506000918316906370a082319060240160206040518083038186803b15801561062457600080fd5b505afa158015610638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065c9190610d54565b90508015610733576003546040517f205c28780000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052602482018490529185169063205c287890604401600060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50505050806001600160a01b03167f43a46ac5237b9605f9ffdc5ca9e3ada3bea496bd00815441705ff59446129fb18360405161072091815260200190565b60405180910390a2600194505050505090565b6000935050505090565b336107506000546001600160a01b031690565b6001600160a01b0316146107a65760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6107b06000610b45565b565b6000336107c76000546001600160a01b031690565b6001600160a01b03161461081d5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b61082682610ba2565b6040516001600160a01b03831681527ffbebf27e430f83725e26527d071ece14a3542fb0ab947b63747e1739708378b5906020016102a5565b6000336108746000546001600160a01b031690565b6001600160a01b0316146108ca5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6108d382610c27565b92915050565b336108ec6000546001600160a01b031690565b6001600160a01b0316146109425760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6001600160a01b0381166109be5760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c652f70656e64696e674f776e65722d6e6f742d7a65726f2d616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161025e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f239a2ddded15777fa246aed5f7e1a9bc69a39d4eb4a397034d1d85766cca7d4c90600090a250565b6001600160a01b038116610a915760405162461bcd60e51b815260206004820152602260248201527f466c7573682f64657374696e6174696f6e2d6e6f742d7a65726f2d616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161025e565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038116610b165760405162461bcd60e51b815260206004820152601f60248201527f466c7573682f73747261746567792d6e6f742d7a65726f2d6164647265737300604482015260640161025e565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152601e60248201527f466c7573682f726573657276652d6e6f742d7a65726f2d616464726573730000604482015260640161025e565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546000906001600160a01b03908116908316811415610cb05760405162461bcd60e51b815260206004820152602360248201527f4d616e61676561626c652f6578697374696e672d6d616e616765722d6164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161025e565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385811691821790925560405190918316907f9cb45c728de594dab506a1f1a8554e24c8eeaf983618d5ec5dd7bc6f3c49feee90600090a350600192915050565b600060208284031215610d2557600080fd5b8135610d3081610d6d565b9392505050565b600060208284031215610d4957600080fd5b8151610d3081610d6d565b600060208284031215610d6657600080fd5b5051919050565b6001600160a01b0381168114610d8257600080fd5b5056fea26469706673582212208cd9231ef7f813332c1ff4cae2043f8c9081c2b70281327d9df0479148f2549c64736f6c63430008060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636b9f96ea1161008c5780639cecc80a116100665780639cecc80a146101ad578063d0ebdbe7146101c0578063e30c3978146101d3578063f2fde38b146101e457600080fd5b80636b9f96ea1461017c578063715018a6146101945780638da5cb5b1461019c57600080fd5b806333a100ca116100c857806333a100ca1461013d578063481c6a75146101505780634e71e0c81461016157806359bf5d391461016b57600080fd5b806307da0603146100ef5780630a0a05e61461011957806316ad95421461012c575b600080fd5b6005546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc610127366004610d13565b6101f7565b6003546001600160a01b03166100fc565b6100fc61014b366004610d13565b6102b1565b6002546001600160a01b03166100fc565b61016961035e565b005b6004546001600160a01b03166100fc565b6101846103ec565b6040519015158152602001610110565b61016961073d565b6000546001600160a01b03166100fc565b6100fc6101bb366004610d13565b6107b2565b6101846101ce366004610d13565b61085f565b6001546001600160a01b03166100fc565b6101696101f2366004610d13565b6108d9565b60003361020c6000546001600160a01b031690565b6001600160a01b0316146102675760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064015b60405180910390fd5b61027082610a15565b6040516001600160a01b03831681527f02b0c42ff9b0e5574a8fb272d0d3912de57184ca7a14f102643fb371a89bc213906020015b60405180910390a15090565b6000336102c66000546001600160a01b031690565b6001600160a01b03161461031c5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b61032582610ac0565b6040516001600160a01b03831681527fe70d79dad95c835bdd87e9cf4665651c9e5abb3b756e4fd2bf45f29c95c3aa40906020016102a5565b6001546001600160a01b031633146103b85760405162461bcd60e51b815260206004820152601f60248201527f4f776e61626c652f63616c6c65722d6e6f742d70656e64696e674f776e657200604482015260640161025e565b6001546103cd906001600160a01b0316610b45565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000336104016002546001600160a01b031690565b6001600160a01b0316148061042f5750336104246000546001600160a01b031690565b6001600160a01b0316145b6104a15760405162461bcd60e51b815260206004820152602660248201527f4d616e61676561626c652f63616c6c65722d6e6f742d6d616e616765722d6f7260448201527f2d6f776e65720000000000000000000000000000000000000000000000000000606482015260840161025e565b600560009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104f157600080fd5b505af1158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190610d54565b5060048054604080517f21df0da700000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169260009284926321df0da79281810192602092909190829003018186803b15801561058c57600080fd5b505afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190610d37565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192506000918316906370a082319060240160206040518083038186803b15801561062457600080fd5b505afa158015610638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065c9190610d54565b90508015610733576003546040517f205c28780000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052602482018490529185169063205c287890604401600060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50505050806001600160a01b03167f43a46ac5237b9605f9ffdc5ca9e3ada3bea496bd00815441705ff59446129fb18360405161072091815260200190565b60405180910390a2600194505050505090565b6000935050505090565b336107506000546001600160a01b031690565b6001600160a01b0316146107a65760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6107b06000610b45565b565b6000336107c76000546001600160a01b031690565b6001600160a01b03161461081d5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b61082682610ba2565b6040516001600160a01b03831681527ffbebf27e430f83725e26527d071ece14a3542fb0ab947b63747e1739708378b5906020016102a5565b6000336108746000546001600160a01b031690565b6001600160a01b0316146108ca5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6108d382610c27565b92915050565b336108ec6000546001600160a01b031690565b6001600160a01b0316146109425760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e65720000000000000000604482015260640161025e565b6001600160a01b0381166109be5760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c652f70656e64696e674f776e65722d6e6f742d7a65726f2d616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161025e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f239a2ddded15777fa246aed5f7e1a9bc69a39d4eb4a397034d1d85766cca7d4c90600090a250565b6001600160a01b038116610a915760405162461bcd60e51b815260206004820152602260248201527f466c7573682f64657374696e6174696f6e2d6e6f742d7a65726f2d616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161025e565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038116610b165760405162461bcd60e51b815260206004820152601f60248201527f466c7573682f73747261746567792d6e6f742d7a65726f2d6164647265737300604482015260640161025e565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152601e60248201527f466c7573682f726573657276652d6e6f742d7a65726f2d616464726573730000604482015260640161025e565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546000906001600160a01b03908116908316811415610cb05760405162461bcd60e51b815260206004820152602360248201527f4d616e61676561626c652f6578697374696e672d6d616e616765722d6164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161025e565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385811691821790925560405190918316907f9cb45c728de594dab506a1f1a8554e24c8eeaf983618d5ec5dd7bc6f3c49feee90600090a350600192915050565b600060208284031215610d2557600080fd5b8135610d3081610d6d565b9392505050565b600060208284031215610d4957600080fd5b8151610d3081610d6d565b600060208284031215610d6657600080fd5b5051919050565b6001600160a01b0381168114610d8257600080fd5b5056fea26469706673582212208cd9231ef7f813332c1ff4cae2043f8c9081c2b70281327d9df0479148f2549c64736f6c63430008060033",
  "devdoc": {
    "author": "PoolTogether Inc Team",
    "events": {
      "Deployed(address,address,address)": {
        "params": {
          "destination": "Destination address",
          "reserve": "Strategy address",
          "strategy": "Reserve address"
        }
      }
    },
    "kind": "dev",
    "methods": {
      "claimOwnership()": {
        "details": "This function is only callable by the `_pendingOwner`."
      },
      "constructor": {
        "params": {
          "_destination": "Destination address",
          "_owner": "Prize Flush owner address",
          "_reserve": "Reserve address",
          "_strategy": "Strategy address"
        }
      },
      "flush()": {
        "details": "Captures interest, checkpoint data and transfers tokens to final destination.",
        "returns": {
          "_0": "True if operation is successful."
        }
      },
      "manager()": {
        "returns": {
          "_0": "Current `_manager` address."
        }
      },
      "pendingOwner()": {
        "returns": {
          "_0": "Current `_pendingOwner` address."
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setManager(address)": {
        "details": "Throws if called by any account other than the owner.",
        "params": {
          "_newManager": "New _manager address."
        },
        "returns": {
          "_0": "Boolean to indicate if the operation was successful or not."
        }
      },
      "transferOwnership(address)": {
        "params": {
          "_newOwner": "Address to transfer ownership to."
        }
      }
    },
    "stateVariables": {
      "destination": {
        "details": "Should be set to the PrizeDistributor address."
      }
    },
    "title": "PoolTogether V4 PrizeFlush",
    "version": 1
  },
  "userdoc": {
    "events": {
      "Deployed(address,address,address)": {
        "notice": "Emitted when contract has been deployed."
      },
      "DestinationSet(address)": {
        "notice": "Emit when destination is set."
      },
      "Flushed(address,uint256)": {
        "notice": "Emit when the flush function has executed."
      },
      "ReserveSet(address)": {
        "notice": "Emit when reserve is set."
      },
      "StrategySet(address)": {
        "notice": "Emit when strategy is set."
      }
    },
    "kind": "user",
    "methods": {
      "claimOwnership()": {
        "notice": "Allows the `_pendingOwner` address to finalize the transfer."
      },
      "constructor": {
        "notice": "Deploy Prize Flush."
      },
      "flush()": {
        "notice": "Migrate interest from PrizePool to PrizeDistributor in a single transaction."
      },
      "getDestination()": {
        "notice": "Read global destination variable."
      },
      "getReserve()": {
        "notice": "Read global reserve variable."
      },
      "getStrategy()": {
        "notice": "Read global strategy variable."
      },
      "manager()": {
        "notice": "Gets current `_manager`."
      },
      "owner()": {
        "notice": "Returns the address of the current owner."
      },
      "pendingOwner()": {
        "notice": "Gets current `_pendingOwner`."
      },
      "renounceOwnership()": {
        "notice": "Renounce ownership of the contract."
      },
      "setDestination(address)": {
        "notice": "Set global destination variable."
      },
      "setManager(address)": {
        "notice": "Set or change of manager."
      },
      "setReserve(address)": {
        "notice": "Set global reserve variable."
      },
      "setStrategy(address)": {
        "notice": "Set global strategy variable."
      },
      "transferOwnership(address)": {
        "notice": "Allows current owner to set the `_pendingOwner` address."
      }
    },
    "notice": "The PrizeFlush contract helps capture interest from the PrizePool and move collected funds to a designated PrizeDistributor contract. When deployed, the destination, reserve and strategy addresses are set and used as static parameters during every \"flush\" execution. The parameters can be reset by the Owner if necessary.",
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 4755,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "_owner",
        "offset": 0,
        "slot": "0",
        "type": "t_address"
      },
      {
        "astId": 4757,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "_pendingOwner",
        "offset": 0,
        "slot": "1",
        "type": "t_address"
      },
      {
        "astId": 4653,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "_manager",
        "offset": 0,
        "slot": "2",
        "type": "t_address"
      },
      {
        "astId": 14822,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "destination",
        "offset": 0,
        "slot": "3",
        "type": "t_address"
      },
      {
        "astId": 14826,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "reserve",
        "offset": 0,
        "slot": "4",
        "type": "t_contract(IReserve)10737"
      },
      {
        "astId": 14830,
        "contract": "@pooltogether/v4-periphery/contracts/PrizeFlush.sol:PrizeFlush",
        "label": "strategy",
        "offset": 0,
        "slot": "5",
        "type": "t_contract(IStrategy)10751"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_contract(IReserve)10737": {
        "encoding": "inplace",
        "label": "contract IReserve",
        "numberOfBytes": "20"
      },
      "t_contract(IStrategy)10751": {
        "encoding": "inplace",
        "label": "contract IStrategy",
        "numberOfBytes": "20"
      }
    }
  }
}