UNPKG

@maplelabs/core-artifacts

Version:

Consist artifacts of the maple protocol

8,331 lines 337 kB
{
  "id": "4d43c1e3c82dae0246edc7f38c4f2fbe",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol\npragma solidity =0.6.11 >=0.6.0 <0.8.0;\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\n/* pragma solidity >=0.6.0 <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(address sender, address recipient, uint256 amount) 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\n////// contracts/core/funds-distribution-token/v1/interfaces/IBasicFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/// @title BasicFDT implements the basic level FDT functionality for accounting for revenues.\ninterface IBasicFDT is IERC20 {\n\n    /**\n        @dev   This event emits when new funds are distributed.\n        @param by               The address of the sender that distributed funds.\n        @param fundsDistributed The amount of funds received for distribution.\n     */\n    event FundsDistributed(address indexed by, uint256 fundsDistributed);\n\n    /**\n        @dev   This event emits when distributed funds are withdrawn by a token holder.\n        @param by             The address of the receiver of funds.\n        @param fundsWithdrawn The amount of funds that were withdrawn.\n        @param totalWithdrawn The total amount of funds that were withdrawn.\n     */\n    event FundsWithdrawn(address indexed by, uint256 fundsWithdrawn, uint256 totalWithdrawn);\n\n    /**\n        @dev This event emits when the internal `pointsPerShare` is updated.\n        @dev First, and only, parameter is the new value of the internal `pointsPerShare`.\n     */\n    event PointsPerShareUpdated(uint256);\n\n    /**\n        @dev This event emits when an account's `pointsCorrection` is updated.\n        @dev First parameter is the address of some account.\n        @dev Second parameter is the new value of the account's `pointsCorrection`.\n     */\n    event PointsCorrectionUpdated(address indexed, int256);\n\n    /**\n        @dev    Returns the amount of funds that an account can withdraw.\n        @param  _owner The address of some FDT holder.\n        @return The amount funds that `_owner` can withdraw.\n     */\n    function withdrawableFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Withdraws all available funds for the calling FDT holder.\n     */\n    function withdrawFunds() external;\n\n    /**\n        @dev    Returns the amount of funds that an account has withdrawn.\n        @param  _owner The address of a token holder.\n        @return The amount of funds that `_owner` has withdrawn.\n     */\n    function withdrawnFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of funds that an account has earned in total. \n        @dev    accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) \n                = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier \n        @param  _owner The address of a token holder.\n        @return The amount of funds that `_owner` has earned in total.\n     */\n    function accumulativeFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Registers a payment of funds in tokens. \n        @dev May be called directly after a deposit is made. \n        @dev Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the new and previous \n             `fundsToken` balance and increments the total received funds (cumulative), by delta, by calling _distributeFunds().\n     */\n    function updateFundsReceived() external;\n\n}\n\n////// contracts/core/funds-distribution-token/v1/interfaces/IExtendedFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IBasicFDT } from \"./IBasicFDT.sol\"; */\n\n/// @title ExtendedFDT implements the FDT functionality for accounting for losses.\ninterface IExtendedFDT is IBasicFDT {\n\n    /**\n        @dev This event emits when the internal `lossesPerShare` is updated.\n        @dev First, and only, parameter is the new value of the internal `lossesPerShare`.\n     */\n    event LossesPerShareUpdated(uint256);\n\n    /**\n        @dev This event emits when an account's `lossesCorrection` is updated.\n        @dev First parameter is the address of some account.\n        @dev Second parameter is the new value of the account's `lossesCorrection`.\n     */\n    event LossesCorrectionUpdated(address indexed, int256);\n\n    /**\n        @dev This event emits when new losses are distributed.\n        @dev First parameter is the address of the account that has distributed losses.\n        @dev Second parameter is the amount of losses received for distribution.\n     */\n    event LossesDistributed(address indexed, uint256);\n\n    /**\n        @dev   This event emits when distributed losses are recognized by a token holder.\n        @dev First parameter is the address of the receiver of losses.\n        @dev Second parameter is the amount of losses that were recognized.\n        @dev Third parameter is the total amount of losses that are recognized.\n     */\n    event LossesRecognized(address indexed, uint256, uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account can withdraw.\n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` can withdraw.\n     */\n    function recognizableLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account has recognized.\n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` has recognized.\n     */\n    function recognizedLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account has earned in total. \n        @dev    accumulativeLossesOf(_owner) = recognizableLossesOf(_owner) + recognizedLossesOf(_owner) \n                = (lossesPerShare * balanceOf(_owner) + lossesCorrection[_owner]) / pointsMultiplier \n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` has earned in total.\n     */\n    function accumulativeLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Registers a loss. \n        @dev May be called directly after a shortfall after BPT burning occurs. \n        @dev Calls _updateLossesTokenBalance(), whereby the contract computes the delta of the new and previous \n             losses balance and increments the total losses (cumulative), by delta, by calling _distributeLosses(). \n     */\n    function updateLossesReceived() external;\n\n}\n\n////// contracts/core/stake-locker/v1/interfaces/IStakeLockerFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IExtendedFDT } from \"../../../funds-distribution-token/v1/interfaces/IExtendedFDT.sol\"; */\n\n/// @title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers.\ninterface IStakeLockerFDT is IExtendedFDT {\n\n    /**\n        @dev The ERC-2222 Funds Token.\n     */\n    function fundsToken() external view returns (IERC20);\n\n    /**\n        @dev The sum of all unrecognized losses.\n     */\n    function bptLosses() external view returns (uint256);\n\n    /**\n        @dev The amount of losses present and accounted for in this contract.\n     */\n    function lossesBalance() external view returns (uint256);\n\n    /**\n        @dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract.\n     */\n    function fundsTokenBalance() external view returns (uint256);\n\n}\n\n////// contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IStakeLockerFDT } from \"./IStakeLockerFDT.sol\"; */\n\n/// @title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest.\ninterface IStakeLocker is IStakeLockerFDT {\n\n    /**\n        @dev   Emits an event indicating that the Stake Locker is now open to the public.\n     */\n    event StakeLockerOpened();\n\n    /**\n        @dev   Emits an event indicating some Balance was updated.\n        @param staker  The address of a Staker.\n        @param token   The address of the token for which the balance of `staker` changed.\n        @param balance The new balance for `staker`.\n     */\n    event BalanceUpdated(address indexed staker, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating that the ability of `staker` to stake before the locker is open to the public, has changed.\n        @param staker The address of some account.\n        @param status Whether `staker` can stake before the locker is open to the public.\n     */\n    event AllowListUpdated(address indexed staker, bool status);\n\n    /**\n        @dev   Emits an event indicating a that a Staker's effective stake date has changed.\n        @param staker    The address of a Staker.\n        @param stakeDate The new effective stake date.\n     */\n    event StakeDateUpdated(address indexed staker, uint256 stakeDate);\n\n    /**\n        @dev   Emits an event indicating that the stake lockup period has changed.\n        @param lockupPeriod The new stake lockup period.\n     */\n    event LockupPeriodUpdated(uint256 lockupPeriod);\n\n    /**\n        @dev   Emits an event indicating that the cooldown timestamp for a staker has changed.\n        @param staker   The address of a Staker.\n        @param cooldown The new cooldown timestamp for `staker`.\n     */\n    event Cooldown(address indexed staker, uint256 cooldown);\n\n    /**\n        @dev   Emits an event indicating `staker` has added `amount` to the total they have staked.\n        @param staker The address of a Staker.\n        @param amount The additional amount staked.\n     */\n    event Stake(address indexed staker, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating `staker` has removed `amount` from the total they have staked.\n        @param staker The address of a Staker.\n        @param amount The amount unstaked.\n     */\n    event Unstake(address indexed staker, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that a Custodian transferred some StakeLockerFDTs for purposes of custody.\n        @param custodian The address of the Custodian initiating the transfer.\n        @param from      The account that owns the StakeLockerFDTs.\n        @param to        The address of a Custodian taking custody of the amount.\n        @param amount    The amount of StakeLockerFDTs being re-custodied.\n     */\n    event CustodyTransfer(address indexed custodian, address indexed from, address indexed to, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that the amount being custodied by a Custodian, on behalf of a Staker, has changed.\n        @param staker       The address of a Staker.\n        @param custodian    The address of a Custodian.\n        @param oldAllowance The old amount of StakeLockerFDTs `custodian` had custodied on behalf of `staker`.\n        @param newAllowance The new amount of StakeLockerFDTs `custodian` has custodied on behalf of `staker`.\n     */\n    event CustodyAllowanceChanged(address indexed staker, address indexed custodian, uint256 oldAllowance, uint256 newAllowance);\n\n    /**\n        @dev   Emits an event indicating that the total amount of StakeLockerFDTs custodied, on behalf of a Staker, by all custodians, has changed.\n        @param staker            The address of a Staker.\n        @param newTotalAllowance The total amount of StakeLockerFDTs custodied, on behalf of `staker`, by all custodians.\n     */\n    event TotalCustodyAllowanceUpdated(address indexed staker, uint256 newTotalAllowance);\n\n    /**\n        @dev The asset deposited by Stakers into this contract, for liquidation during defaults.\n     */\n    function stakeAsset() external view returns (IERC20);\n\n    /**\n        @dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest.\n     */\n    function liquidityAsset() external view returns (address);\n\n    /**\n        @dev The parent Pool.\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The number of seconds for which unstaking is not allowed.\n     */\n    function lockupPeriod() external view returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return The effective stake date of `account`.\n     */\n    function stakeDate(address account) external returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return The timestamp of when `account` called `cooldown()`.\n     */\n    function unstakeCooldown(address account) external view returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return Whether `account` is allowed.\n     */\n    function allowed(address account) external view returns (bool);\n\n    /**\n        @param  account   The address of an account.\n        @param  custodian The address of a custodian.\n        @return The amount of StakeLockerFDTs of `account` that are \"locked\" at `custodian`.\n     */\n    function custodyAllowance(address account, address custodian) external view returns (uint256);\n\n    /**\n        @param  account   The address of an account.\n        @return The total amount of StakeLockerFDTs that are \"locked\" for a given account, cannot be greater than balance.\n     */\n    function totalCustodyAllowance(address account) external view returns (uint256);\n\n    function openToPublic() external view returns (bool);\n\n    /**\n        @dev   Updates Staker status on the allowlist. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits an `AllowListUpdated` event. \n        @param staker The address of the Staker to set status for.\n        @param status The status of the Staker on allowlist.\n     */\n    function setAllowlist(address staker, bool status) external;\n\n    /**\n        @dev Sets the StakeLocker as open to the public. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `StakeLockerOpened` event. \n     */\n    function openStakeLockerToPublic() external;\n\n    /**\n        @dev   Sets the lockup period. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LockupPeriodUpdated` event. \n        @param newLockupPeriod New lockup period used to restrict unstaking.\n     */\n    function setLockupPeriod(uint256 newLockupPeriod) external;\n\n    /**\n        @dev   Transfers an amount of Stake Asset to a destination account. \n        @dev   Only the Pool can call this function. \n        @param dst The destination to transfer Stake Asset to.\n        @param amt The amount of Stake Asset to transfer.\n     */\n    function pull(address dst, uint256 amt) external;\n\n    /**\n        @dev   Updates loss accounting for StakeLockerFDTs after BPTs have been burned. \n        @dev   Only the Pool can call this function. \n        @param bptsBurned The amount of BPTs that have been burned.\n     */\n    function updateLosses(uint256 bptsBurned) external;\n\n    /**\n        @dev   Handles a Staker's depositing of an amount of Stake Asset, minting them StakeLockerFDTs. \n        @dev   It emits a `StakeDateUpdated` event. \n        @dev   It emits a `Stake` event. \n        @dev   It emits a `Cooldown` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param amt The amount of Stake Asset (BPTs) to deposit.\n     */\n    function stake(uint256 amt) external;\n\n    /**\n        @dev Activates the cooldown period to unstake. \n        @dev It can't be called if the account is not staking. \n        @dev It emits a `Cooldown` event. \n     */\n    function intendToUnstake() external;\n\n    /**\n        @dev Cancels an initiated unstake by resetting the calling account's unstake cooldown. \n        @dev It emits a `Cooldown` event. \n     */\n    function cancelUnstake() external;\n\n    /**\n        @dev   Handles a Staker's withdrawing of an amount of Stake Asset, minus any losses. \n        @dev   It also claims interest and burns StakeLockerFDTs for the calling account. \n        @dev   It emits an `Unstake` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param amt The amount of Stake Asset (BPTs) to withdraw.\n     */\n    function unstake(uint256 amt) external;\n\n    /**\n        @dev Withdraws all claimable interest earned from the StakeLocker for an account. \n        @dev It emits a `BalanceUpdated` event if there are withdrawable funds. \n     */\n    function withdrawFunds() external override;    \n\n    /**\n        @dev   Increases the custody allowance for a given Custodian corresponding to the account (`msg.sender`).\n        @dev   It emits a `CustodyAllowanceChanged` event.\n        @dev   It emits a `TotalCustodyAllowanceUpdated` event.\n        @param custodian The address which will act as Custodian of a given amount for an account.\n        @param amount    The number of additional FDTs to be custodied by the Custodian.\n     */\n    function increaseCustodyAllowance(address custodian, uint256 amount) external;\n\n    /**\n        @dev   Transfers custodied StakeLockerFDTs back to the account. \n        @dev   `from` and `to` should always be equal in this implementation. \n        @dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n        @dev   It emits a `CustodyTransfer` event. \n        @dev   It emits a `CustodyAllowanceChanged` event. \n        @dev   It emits a `TotalCustodyAllowanceUpdated` event. \n        @param from   The address which holds the StakeLockerFDTs.\n        @param to     The address which will be the new owner of the amount of StakeLockerFDTs.\n        @param amount The mount of StakeLockerFDTs transferred.\n     */\n    function transferByCustodian(address from, address to, uint256 amount) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Pool Delegate or a Pool Admin can call this function. \n     */\n    function pause() external;\n\n    /**\n        @dev Triggers unpaused state. \n        @dev Restores functionality for certain functions. \n        @dev Only the Pool Delegate or a Pool Admin can call this function.\n     */\n    function unpause() external;\n\n    /**\n        @dev Returns if the unstake cooldown period has passed for `msg.sender` and if they are in the unstake window.\n     */\n    function isUnstakeAllowed(address from) external view returns (bool);\n\n    /**\n        @dev Returns if an account is allowed to receive a transfer. \n        @dev This is only possible if they have zero cooldown or they are past their unstake window. \n     */\n    function isReceiveAllowed(uint256 _unstakeCooldown) external view returns (bool);\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol": {
        "IBasicFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "IExtendedFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IStakeLocker": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "AllowListUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "name": "BalanceUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "oldAllowance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newAllowance",
                  "type": "uint256"
                }
              ],
              "name": "CustodyAllowanceChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "CustodyTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "lockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Stake",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeDate",
                  "type": "uint256"
                }
              ],
              "name": "StakeDateUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [],
              "name": "StakeLockerOpened",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                }
              ],
              "name": "TotalCustodyAllowanceUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Unstake",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "allowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bptLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "cancelUnstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsToken",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsTokenBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "intendToUnstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unstakeCooldown",
                  "type": "uint256"
                }
              ],
              "name": "isReceiveAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                }
              ],
              "name": "isUnstakeAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lockupPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openStakeLockerToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowlist",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "stake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "stakeDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "totalCustodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodian",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "unstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "unstakeCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                }
              ],
              "name": "updateLosses",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowed(address)": "d63a8e11",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "bptLosses()": "aedc78c3",
              "cancelUnstake()": "4ab17969",
              "custodyAllowance(address,address)": "c965b548",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToUnstake()": "8a10555c",
              "isReceiveAllowed(uint256)": "fab11078",
              "isUnstakeAllowed(address)": "86bf1da3",
              "liquidityAsset()": "209b2bca",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "openStakeLockerToPublic()": "0e754e86",
              "openToPublic()": "1831ccf2",
              "pause()": "8456cb59",
              "pool()": "16f0115b",
              "pull(address,uint256)": "f2d5d56b",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowlist(address,bool)": "b12527f8",
              "setLockupPeriod(uint256)": "c771c390",
              "stake(uint256)": "a694fc3a",
              "stakeAsset()": "80cd916d",
              "stakeDate(address)": "5190bbaf",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "unpause()": "3f4ba83a",
              "unstake(uint256)": "2e17de78",
              "unstakeCooldown(address)": "ff887130",
              "updateFundsReceived()": "46c162de",
              "updateLosses(uint256)": "bcd01be7",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IStakeLockerFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bptLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsToken",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsTokenBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "bptLosses()": "aedc78c3",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "lossesBalance()": "fec984e3",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol": {
        "ast": {
          "absolutePath": "contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol",
          "exportedSymbols": {
            "IBasicFDT": [
              141
            ],
            "IERC20": [
              77
            ],
            "IExtendedFDT": [
              201
            ],
            "IStakeLocker": [
              484
            ],
            "IStakeLockerFDT": [
              229
            ]
          },
          "id": 485,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "135:39:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "282:70:0",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 77,
              "linearizedBaseContracts": [
                77
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3,
                    "nodeType": "StructuredDocumentation",
                    "src": "376:66:0",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 8,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "467:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "493:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "493:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "492:9:0"
                  },
                  "scope": 77,
                  "src": "447:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "508:72:0",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 16,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "604:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "604:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "603:17:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "644:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "644:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "643:9:0"
                  },
                  "scope": 77,
                  "src": "585:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "659:209:0",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 26,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 22,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 19,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "891:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "891:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 21,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "910:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "910:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "890:35:0"
                  },
                  "returnParameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "944:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "944:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "943:6:0"
                  },
                  "scope": 77,
                  "src": "873:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 27,
                    "nodeType": "StructuredDocumentation",
                    "src": "956:264:0",
                    "text": " @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 This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 36,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 32,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 29,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1244:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 31,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1259:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1259:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1243:32:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1299:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1299:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1298:9:0"
                  },
                  "scope": 77,
                  "src": "1225:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "1314:642:0",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\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 Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 46,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 42,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 39,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "1978:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1978:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 41,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "1995:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1995:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1977:33:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "2029:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 43,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2029:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2028:6:0"
                  },
                  "scope": 77,
                  "src": "1961:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "2041:296:0",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 58,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 54,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 49,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2364:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 48,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2364:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 51,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2380:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2380:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 53,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2399:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2399:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2363:51:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 56,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2433:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 55,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2433:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2432:6:0"
                  },
                  "scope": 77,
                  "src": "2342:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "2445:158:0",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 67,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 66,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 61,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2623:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2623:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 63,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2645:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2645:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 65,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2665:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2665:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2622:57:0"
                  },
                  "src": "2608:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "2686:148:0",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 76,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 70,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2854:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2854:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 72,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2877:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2877:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 74,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2902:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2902:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2853:63:0"
                  },
                  "src": "2839:78:0"
                }
              ],
              "scope": 485,
              "src": "353:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "3252:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 80,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3252:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 78,
                "nodeType": "StructuredDocumentation",
                "src": "3135:94:0",
                "text": "@title BasicFDT implements the basic level FDT functionality for accounting for revenues."
              },
              "fullyImplemented": false,
              "id": 141,
              "linearizedBaseContracts": [
                141,
                77
              ],
              "name": "IBasicFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 81,
                    "nodeType": "StructuredDocumentation",
                    "src": "3266:236:0",
                    "text": "@dev   This event emits when new funds are distributed.\n@param by               The address of the sender that distributed funds.\n@param fundsDistributed The amount of funds received for distribution."
                  },
                  "id": 87,
                  "name": "FundsDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 83,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "by",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 87,
                        "src": "3530:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3530:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 85,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundsDistributed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 87,
                        "src": "3550:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3550:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3529:46:0"
                  },
                  "src": "3507:69:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 88,
                    "nodeType": "StructuredDocumentation",
                    "src": "3582:315:0",
                    "text": "@dev   This event emits when distributed funds are withdrawn by a token holder.\n@param by             The address of the receiver of funds.\n@param fundsWithdrawn The amount of funds that were withdrawn.\n@param totalWithdrawn The total amount of funds that were withdrawn."
                  },
                  "id": 96,
                  "name": "FundsWithdrawn",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 95,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 90,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "by",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3923:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 89,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3923:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 92,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundsWithdrawn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3943:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 91,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3943:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 94,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "totalWithdrawn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3967:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3967:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3922:68:0"
                  },
                  "src": "3902:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "3997:179:0",
                    "text": "@dev This event emits when the internal `pointsPerShare` is updated.\n@dev First, and only, parameter is the new value of the internal `pointsPerShare`."
                  },
                  "id": 101,
                  "name": "PointsPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 99,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "4209:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4209:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4208:9:0"
                  },
                  "src": "4181:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "4224:235:0",
                    "text": "@dev This event emits when an account's `pointsCorrection` is updated.\n@dev First parameter is the address of some account.\n@dev Second parameter is the new value of the account's `pointsCorrection`."
                  },
                  "id": 108,
                  "name": "PointsCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 107,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 104,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "4494:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4494:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 106,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "4511:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4511:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4493:25:0"
                  },
                  "src": "4464:55:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "4525:201:0",
                    "text": "@dev    Returns the amount of funds that an account can withdraw.\n@param  _owner The address of some FDT holder.\n@return The amount funds that `_owner` can withdraw."
                  },
                  "functionSelector": "443bb293",
                  "id": 116,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawableFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4760:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4760:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4759:16:0"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4799:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4799:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4798:9:0"
                  },
                  "scope": 141,
                  "src": "4731:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 117,
                    "nodeType": "StructuredDocumentation",
                    "src": "4814:82:0",
                    "text": "@dev Withdraws all available funds for the calling FDT holder."
                  },
                  "functionSelector": "24600fc3",
                  "id": 120,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 118,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4923:2:0"
                  },
                  "returnParameters": {
                    "id": 119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4934:0:0"
                  },
                  "scope": 141,
                  "src": "4901:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 121,
                    "nodeType": "StructuredDocumentation",
                    "src": "4941:205:0",
                    "text": "@dev    Returns the amount of funds that an account has withdrawn.\n@param  _owner The address of a token holder.\n@return The amount of funds that `_owner` has withdrawn."
                  },
                  "functionSelector": "0041c52c",
                  "id": 128,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawnFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 123,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5177:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5177:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5176:16:0"
                  },
                  "returnParameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5216:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5216:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5215:9:0"
                  },
                  "scope": 141,
                  "src": "5151:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "5231:422:0",
                    "text": "@dev    Returns the amount of funds that an account has earned in total. \n@dev    accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) \n= (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier \n@param  _owner The address of a token holder.\n@return The amount of funds that `_owner` has earned in total."
                  },
                  "functionSelector": "4e97415f",
                  "id": 136,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5687:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5687:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5686:16:0"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5726:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5726:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5725:9:0"
                  },
                  "scope": 141,
                  "src": "5658:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 137,
                    "nodeType": "StructuredDocumentation",
                    "src": "5741:368:0",
                    "text": "@dev Registers a payment of funds in tokens. \n@dev May be called directly after a deposit is made. \n@dev Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the new and previous \n`fundsToken` balance and increments the total received funds (cumulative), by delta, by calling _distributeFunds()."
                  },
                  "functionSelector": "46c162de",
                  "id": 140,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateFundsReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 138,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6142:2:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6153:0:0"
                  },
                  "scope": 141,
                  "src": "6114:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 485,
              "src": "3229:2928:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 143,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "6429:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 144,
                  "nodeType": "InheritanceSpecifier",
                  "src": "6429:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 142,
                "nodeType": "StructuredDocumentation",
                "src": "6320:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": false,
              "id": 201,
              "linearizedBaseContracts": [
                201,
                141,
                77
              ],
              "name": "IExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 145,
                    "nodeType": "StructuredDocumentation",
                    "src": "6446:179:0",
                    "text": "@dev This event emits when the internal `lossesPerShare` is updated.\n@dev First, and only, parameter is the new value of the internal `lossesPerShare`."
                  },
                  "id": 149,
                  "name": "LossesPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 147,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 149,
                        "src": "6658:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 146,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6658:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6657:9:0"
                  },
                  "src": "6630:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 150,
                    "nodeType": "StructuredDocumentation",
                    "src": "6673:235:0",
                    "text": "@dev This event emits when an account's `lossesCorrection` is updated.\n@dev First parameter is the address of some account.\n@dev Second parameter is the new value of the account's `lossesCorrection`."
                  },
                  "id": 156,
                  "name": "LossesCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 152,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 156,
                        "src": "6943:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 151,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6943:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 154,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 156,
                        "src": "6960:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 153,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6960:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6942:25:0"
                  },
                  "src": "6913:55:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 157,
                    "nodeType": "StructuredDocumentation",
                    "src": "6974:243:0",
                    "text": "@dev This event emits when new losses are distributed.\n@dev First parameter is the address of the account that has distributed losses.\n@dev Second parameter is the amount of losses received for distribution."
                  },
                  "id": 163,
                  "name": "LossesDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 162,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 159,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 163,
                        "src": "7246:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 158,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7246:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 161,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 163,
                        "src": "7263:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 160,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7263:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7245:26:0"
                  },
                  "src": "7222:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 164,
                    "nodeType": "StructuredDocumentation",
                    "src": "7278:328:0",
                    "text": "@dev   This event emits when distributed losses are recognized by a token holder.\n@dev First parameter is the address of the receiver of losses.\n@dev Second parameter is the amount of losses that were recognized.\n@dev Third parameter is the total amount of losses that are recognized."
                  },
                  "id": 172,
                  "name": "LossesRecognized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 171,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 166,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 172,
                        "src": "7634:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7634:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 168,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 172,
                        "src": "7651:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7651:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 170,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 172,
                        "src": "7660:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 169,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7660:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7633:35:0"
                  },
                  "src": "7611:58:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 173,
                    "nodeType": "StructuredDocumentation",
                    "src": "7675:205:0",
                    "text": "@dev    Returns the amount of losses that an account can withdraw.\n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` can withdraw."
                  },
                  "functionSelector": "66967791",
                  "id": 180,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 175,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 180,
                        "src": "7915:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 174,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7915:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7914:16:0"
                  },
                  "returnParameters": {
                    "id": 179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 178,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 180,
                        "src": "7954:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 177,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7954:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7953:9:0"
                  },
                  "scope": 201,
                  "src": "7885:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 181,
                    "nodeType": "StructuredDocumentation",
                    "src": "7969:209:0",
                    "text": "@dev    Returns the amount of losses that an account has recognized.\n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` has recognized."
                  },
                  "functionSelector": "aed4966a",
                  "id": 188,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 183,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 188,
                        "src": "8211:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 182,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8211:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8210:16:0"
                  },
                  "returnParameters": {
                    "id": 187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 186,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 188,
                        "src": "8250:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 185,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8250:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8249:9:0"
                  },
                  "scope": 201,
                  "src": "8183:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 189,
                    "nodeType": "StructuredDocumentation",
                    "src": "8265:428:0",
                    "text": "@dev    Returns the amount of losses that an account has earned in total. \n@dev    accumulativeLossesOf(_owner) = recognizableLossesOf(_owner) + recognizedLossesOf(_owner) \n= (lossesPerShare * balanceOf(_owner) + lossesCorrection[_owner]) / pointsMultiplier \n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` has earned in total."
                  },
                  "functionSelector": "40bde098",
                  "id": 196,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 191,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "8728:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 190,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8728:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8727:16:0"
                  },
                  "returnParameters": {
                    "id": 195,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 194,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "8767:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 193,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8767:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8766:9:0"
                  },
                  "scope": 201,
                  "src": "8698:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 197,
                    "nodeType": "StructuredDocumentation",
                    "src": "8782:354:0",
                    "text": "@dev Registers a loss. \n@dev May be called directly after a shortfall after BPT burning occurs. \n@dev Calls _updateLossesTokenBalance(), whereby the contract computes the delta of the new and previous \nlosses balance and increments the total losses (cumulative), by delta, by calling _distributeLosses(). "
                  },
                  "functionSelector": "cc0fef02",
                  "id": 200,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9170:2:0"
                  },
                  "returnParameters": {
                    "id": 199,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9181:0:0"
                  },
                  "scope": 201,
                  "src": "9141:41:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 485,
              "src": "6403:2782:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 203,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 201,
                    "src": "9618:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$201",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 204,
                  "nodeType": "InheritanceSpecifier",
                  "src": "9618:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                201
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 202,
                "nodeType": "StructuredDocumentation",
                "src": "9499:90:0",
                "text": "@title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers."
              },
              "fullyImplemented": false,
              "id": 229,
              "linearizedBaseContracts": [
                229,
                201,
                141,
                77
              ],
              "name": "IStakeLockerFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 205,
                    "nodeType": "StructuredDocumentation",
                    "src": "9638:50:0",
                    "text": "@dev The ERC-2222 Funds Token."
                  },
                  "functionSelector": "63f04b15",
                  "id": 210,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 206,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9712:2:0"
                  },
                  "returnParameters": {
                    "id": 209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 208,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 210,
                        "src": "9738:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 207,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "9738:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9737:8:0"
                  },
                  "scope": 229,
                  "src": "9693:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 211,
                    "nodeType": "StructuredDocumentation",
                    "src": "9752:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "aedc78c3",
                  "id": 216,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bptLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 212,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9835:2:0"
                  },
                  "returnParameters": {
                    "id": 215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 214,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 216,
                        "src": "9861:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9861:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9860:9:0"
                  },
                  "scope": 229,
                  "src": "9817:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 217,
                    "nodeType": "StructuredDocumentation",
                    "src": "9876:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 222,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9992:2:0"
                  },
                  "returnParameters": {
                    "id": 221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 220,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 222,
                        "src": "10018:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10018:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10017:9:0"
                  },
                  "scope": 229,
                  "src": "9970:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 223,
                    "nodeType": "StructuredDocumentation",
                    "src": "10033:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 228,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 224,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10187:2:0"
                  },
                  "returnParameters": {
                    "id": 227,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 226,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 228,
                        "src": "10213:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10213:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10212:9:0"
                  },
                  "scope": 229,
                  "src": "10161:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 485,
              "src": "9589:636:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 231,
                    "name": "IStakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 229,
                    "src": "10630:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLockerFDT_$229",
                      "typeString": "contract IStakeLockerFDT"
                    }
                  },
                  "id": 232,
                  "nodeType": "InheritanceSpecifier",
                  "src": "10630:15:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                201,
                229
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 230,
                "nodeType": "StructuredDocumentation",
                "src": "10496:108:0",
                "text": "@title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest."
              },
              "fullyImplemented": false,
              "id": 484,
              "linearizedBaseContracts": [
                484,
                229,
                201,
                141,
                77
              ],
              "name": "IStakeLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 233,
                    "nodeType": "StructuredDocumentation",
                    "src": "10653:101:0",
                    "text": "@dev   Emits an event indicating that the Stake Locker is now open to the public."
                  },
                  "id": 235,
                  "name": "StakeLockerOpened",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 234,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10782:2:0"
                  },
                  "src": "10759:26:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 236,
                    "nodeType": "StructuredDocumentation",
                    "src": "10791:270:0",
                    "text": "@dev   Emits an event indicating some Balance was updated.\n@param staker  The address of a Staker.\n@param token   The address of the token for which the balance of `staker` changed.\n@param balance The new balance for `staker`."
                  },
                  "id": 244,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 243,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 238,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 244,
                        "src": "11087:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 237,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11087:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 240,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 244,
                        "src": "11111:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11111:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 242,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 244,
                        "src": "11134:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 241,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11134:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11086:64:0"
                  },
                  "src": "11066:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 245,
                    "nodeType": "StructuredDocumentation",
                    "src": "11157:285:0",
                    "text": "@dev   Emits an event indicating that the ability of `staker` to stake before the locker is open to the public, has changed.\n@param staker The address of some account.\n@param status Whether `staker` can stake before the locker is open to the public."
                  },
                  "id": 251,
                  "name": "AllowListUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 250,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 247,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 251,
                        "src": "11470:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 246,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11470:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 249,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 251,
                        "src": "11494:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "11494:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11469:37:0"
                  },
                  "src": "11447:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 252,
                    "nodeType": "StructuredDocumentation",
                    "src": "11513:209:0",
                    "text": "@dev   Emits an event indicating a that a Staker's effective stake date has changed.\n@param staker    The address of a Staker.\n@param stakeDate The new effective stake date."
                  },
                  "id": 258,
                  "name": "StakeDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 254,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 258,
                        "src": "11750:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 253,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11750:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 256,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 258,
                        "src": "11774:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 255,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11774:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11749:43:0"
                  },
                  "src": "11727:66:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 259,
                    "nodeType": "StructuredDocumentation",
                    "src": "11799:151:0",
                    "text": "@dev   Emits an event indicating that the stake lockup period has changed.\n@param lockupPeriod The new stake lockup period."
                  },
                  "id": 263,
                  "name": "LockupPeriodUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 262,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 261,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "lockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 263,
                        "src": "11981:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 260,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11981:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11980:22:0"
                  },
                  "src": "11955:48:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 264,
                    "nodeType": "StructuredDocumentation",
                    "src": "12009:220:0",
                    "text": "@dev   Emits an event indicating that the cooldown timestamp for a staker has changed.\n@param staker   The address of a Staker.\n@param cooldown The new cooldown timestamp for `staker`."
                  },
                  "id": 270,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 266,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 270,
                        "src": "12249:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12249:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 268,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 270,
                        "src": "12273:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12273:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12248:42:0"
                  },
                  "src": "12234:57:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 271,
                    "nodeType": "StructuredDocumentation",
                    "src": "12297:210:0",
                    "text": "@dev   Emits an event indicating `staker` has added `amount` to the total they have staked.\n@param staker The address of a Staker.\n@param amount The additional amount staked."
                  },
                  "id": 277,
                  "name": "Stake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 273,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 277,
                        "src": "12524:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12524:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 275,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 277,
                        "src": "12548:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12548:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12523:40:0"
                  },
                  "src": "12512:52:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 278,
                    "nodeType": "StructuredDocumentation",
                    "src": "12570:205:0",
                    "text": "@dev   Emits an event indicating `staker` has removed `amount` from the total they have staked.\n@param staker The address of a Staker.\n@param amount The amount unstaked."
                  },
                  "id": 284,
                  "name": "Unstake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 280,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 284,
                        "src": "12794:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 279,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12794:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 282,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 284,
                        "src": "12818:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12818:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12793:40:0"
                  },
                  "src": "12780:54:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 285,
                    "nodeType": "StructuredDocumentation",
                    "src": "12840:431:0",
                    "text": "@dev   Emits an event indicating that a Custodian transferred some StakeLockerFDTs for purposes of custody.\n@param custodian The address of the Custodian initiating the transfer.\n@param from      The account that owns the StakeLockerFDTs.\n@param to        The address of a Custodian taking custody of the amount.\n@param amount    The amount of StakeLockerFDTs being re-custodied."
                  },
                  "id": 295,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 287,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "13298:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 286,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13298:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 289,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "13325:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 288,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13325:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 291,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "13347:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 290,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13347:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 293,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "13367:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 292,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13367:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13297:85:0"
                  },
                  "src": "13276:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 296,
                    "nodeType": "StructuredDocumentation",
                    "src": "13389:467:0",
                    "text": "@dev   Emits an event indicating that the amount being custodied by a Custodian, on behalf of a Staker, has changed.\n@param staker       The address of a Staker.\n@param custodian    The address of a Custodian.\n@param oldAllowance The old amount of StakeLockerFDTs `custodian` had custodied on behalf of `staker`.\n@param newAllowance The new amount of StakeLockerFDTs `custodian` has custodied on behalf of `staker`."
                  },
                  "id": 306,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 305,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 298,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 306,
                        "src": "13891:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 297,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13891:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 300,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 306,
                        "src": "13915:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13915:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 302,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 306,
                        "src": "13942:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 301,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13942:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 304,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 306,
                        "src": "13964:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13964:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13890:95:0"
                  },
                  "src": "13861:125:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 307,
                    "nodeType": "StructuredDocumentation",
                    "src": "13992:339:0",
                    "text": "@dev   Emits an event indicating that the total amount of StakeLockerFDTs custodied, on behalf of a Staker, by all custodians, has changed.\n@param staker            The address of a Staker.\n@param newTotalAllowance The total amount of StakeLockerFDTs custodied, on behalf of `staker`, by all custodians."
                  },
                  "id": 313,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 309,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 313,
                        "src": "14371:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14371:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 311,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 313,
                        "src": "14395:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14395:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14370:51:0"
                  },
                  "src": "14336:86:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 314,
                    "nodeType": "StructuredDocumentation",
                    "src": "14428:108:0",
                    "text": "@dev The asset deposited by Stakers into this contract, for liquidation during defaults."
                  },
                  "functionSelector": "80cd916d",
                  "id": 319,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 315,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14560:2:0"
                  },
                  "returnParameters": {
                    "id": 318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 317,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 319,
                        "src": "14586:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 316,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "14586:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14585:8:0"
                  },
                  "scope": 484,
                  "src": "14541:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 320,
                    "nodeType": "StructuredDocumentation",
                    "src": "14600:116:0",
                    "text": "@dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest."
                  },
                  "functionSelector": "209b2bca",
                  "id": 325,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14744:2:0"
                  },
                  "returnParameters": {
                    "id": 324,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 323,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 325,
                        "src": "14770:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 322,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14770:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14769:9:0"
                  },
                  "scope": 484,
                  "src": "14721:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 326,
                    "nodeType": "StructuredDocumentation",
                    "src": "14785:41:0",
                    "text": "@dev The parent Pool."
                  },
                  "functionSelector": "16f0115b",
                  "id": 331,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 327,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14844:2:0"
                  },
                  "returnParameters": {
                    "id": 330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 329,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 331,
                        "src": "14870:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 328,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14870:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14869:9:0"
                  },
                  "scope": 484,
                  "src": "14831:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 332,
                    "nodeType": "StructuredDocumentation",
                    "src": "14885:82:0",
                    "text": "@dev The number of seconds for which unstaking is not allowed."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 337,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14993:2:0"
                  },
                  "returnParameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 335,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "15019:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 334,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15019:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15018:9:0"
                  },
                  "scope": 484,
                  "src": "14972:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 338,
                    "nodeType": "StructuredDocumentation",
                    "src": "15034:115:0",
                    "text": "@param  account The address of a Staker.\n@return The effective stake date of `account`."
                  },
                  "functionSelector": "5190bbaf",
                  "id": 345,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 341,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 340,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 345,
                        "src": "15173:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 339,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15173:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15172:17:0"
                  },
                  "returnParameters": {
                    "id": 344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 343,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 345,
                        "src": "15208:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15208:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15207:9:0"
                  },
                  "scope": 484,
                  "src": "15154:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 346,
                    "nodeType": "StructuredDocumentation",
                    "src": "15223:129:0",
                    "text": "@param  account The address of a Staker.\n@return The timestamp of when `account` called `cooldown()`."
                  },
                  "functionSelector": "ff887130",
                  "id": 353,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstakeCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 348,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 353,
                        "src": "15382:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 347,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15382:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15381:17:0"
                  },
                  "returnParameters": {
                    "id": 352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 351,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 353,
                        "src": "15422:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 350,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15422:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15421:9:0"
                  },
                  "scope": 484,
                  "src": "15357:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 354,
                    "nodeType": "StructuredDocumentation",
                    "src": "15437:106:0",
                    "text": "@param  account The address of a Staker.\n@return Whether `account` is allowed."
                  },
                  "functionSelector": "d63a8e11",
                  "id": 361,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 361,
                        "src": "15565:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15565:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15564:17:0"
                  },
                  "returnParameters": {
                    "id": 360,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 359,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 361,
                        "src": "15605:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 358,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "15605:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15604:6:0"
                  },
                  "scope": 484,
                  "src": "15548:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 362,
                    "nodeType": "StructuredDocumentation",
                    "src": "15617:211:0",
                    "text": "@param  account   The address of an account.\n@param  custodian The address of a custodian.\n@return The amount of StakeLockerFDTs of `account` that are \"locked\" at `custodian`."
                  },
                  "functionSelector": "c965b548",
                  "id": 371,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 367,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 364,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 371,
                        "src": "15859:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15859:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 366,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 371,
                        "src": "15876:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 365,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15876:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15858:36:0"
                  },
                  "returnParameters": {
                    "id": 370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 369,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 371,
                        "src": "15918:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 368,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15918:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15917:9:0"
                  },
                  "scope": 484,
                  "src": "15833:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 372,
                    "nodeType": "StructuredDocumentation",
                    "src": "15933:187:0",
                    "text": "@param  account   The address of an account.\n@return The total amount of StakeLockerFDTs that are \"locked\" for a given account, cannot be greater than balance."
                  },
                  "functionSelector": "af6d5571",
                  "id": 379,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 374,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 379,
                        "src": "16156:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 373,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16156:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16155:17:0"
                  },
                  "returnParameters": {
                    "id": 378,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 377,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 379,
                        "src": "16196:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 376,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16196:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16195:9:0"
                  },
                  "scope": 484,
                  "src": "16125:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "1831ccf2",
                  "id": 384,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 380,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16232:2:0"
                  },
                  "returnParameters": {
                    "id": 383,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 382,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 384,
                        "src": "16258:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 381,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "16258:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16257:6:0"
                  },
                  "scope": 484,
                  "src": "16211:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 385,
                    "nodeType": "StructuredDocumentation",
                    "src": "16270:312:0",
                    "text": "@dev   Updates Staker status on the allowlist. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits an `AllowListUpdated` event. \n@param staker The address of the Staker to set status for.\n@param status The status of the Staker on allowlist."
                  },
                  "functionSelector": "b12527f8",
                  "id": 392,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 390,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 387,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 392,
                        "src": "16609:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16609:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 389,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 392,
                        "src": "16625:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 388,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "16625:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16608:29:0"
                  },
                  "returnParameters": {
                    "id": 391,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16646:0:0"
                  },
                  "scope": 484,
                  "src": "16587:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 393,
                    "nodeType": "StructuredDocumentation",
                    "src": "16653:182:0",
                    "text": "@dev Sets the StakeLocker as open to the public. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `StakeLockerOpened` event. "
                  },
                  "functionSelector": "0e754e86",
                  "id": 396,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openStakeLockerToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 394,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16872:2:0"
                  },
                  "returnParameters": {
                    "id": 395,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16883:0:0"
                  },
                  "scope": 484,
                  "src": "16840:44:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 397,
                    "nodeType": "StructuredDocumentation",
                    "src": "16890:247:0",
                    "text": "@dev   Sets the lockup period. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LockupPeriodUpdated` event. \n@param newLockupPeriod New lockup period used to restrict unstaking."
                  },
                  "functionSelector": "c771c390",
                  "id": 402,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 400,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 399,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 402,
                        "src": "17167:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 398,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17167:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "17166:25:0"
                  },
                  "returnParameters": {
                    "id": 401,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17200:0:0"
                  },
                  "scope": 484,
                  "src": "17142:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 403,
                    "nodeType": "StructuredDocumentation",
                    "src": "17207:263:0",
                    "text": "@dev   Transfers an amount of Stake Asset to a destination account. \n@dev   Only the Pool can call this function. \n@param dst The destination to transfer Stake Asset to.\n@param amt The amount of Stake Asset to transfer."
                  },
                  "functionSelector": "f2d5d56b",
                  "id": 410,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 408,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 405,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 410,
                        "src": "17489:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 404,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17489:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 407,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 410,
                        "src": "17502:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 406,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17502:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "17488:26:0"
                  },
                  "returnParameters": {
                    "id": 409,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17523:0:0"
                  },
                  "scope": 484,
                  "src": "17475:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 411,
                    "nodeType": "StructuredDocumentation",
                    "src": "17530:222:0",
                    "text": "@dev   Updates loss accounting for StakeLockerFDTs after BPTs have been burned. \n@dev   Only the Pool can call this function. \n@param bptsBurned The amount of BPTs that have been burned."
                  },
                  "functionSelector": "bcd01be7",
                  "id": 416,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 414,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 413,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 416,
                        "src": "17779:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 412,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17779:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "17778:20:0"
                  },
                  "returnParameters": {
                    "id": 415,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17807:0:0"
                  },
                  "scope": 484,
                  "src": "17757:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 417,
                    "nodeType": "StructuredDocumentation",
                    "src": "17814:371:0",
                    "text": "@dev   Handles a Staker's depositing of an amount of Stake Asset, minting them StakeLockerFDTs. \n@dev   It emits a `StakeDateUpdated` event. \n@dev   It emits a `Stake` event. \n@dev   It emits a `Cooldown` event. \n@dev   It emits a `BalanceUpdated` event. \n@param amt The amount of Stake Asset (BPTs) to deposit."
                  },
                  "functionSelector": "a694fc3a",
                  "id": 422,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 420,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 419,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 422,
                        "src": "18205:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18205:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18204:13:0"
                  },
                  "returnParameters": {
                    "id": 421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18226:0:0"
                  },
                  "scope": 484,
                  "src": "18190:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 423,
                    "nodeType": "StructuredDocumentation",
                    "src": "18233:174:0",
                    "text": "@dev Activates the cooldown period to unstake. \n@dev It can't be called if the account is not staking. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "8a10555c",
                  "id": 426,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 424,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18436:2:0"
                  },
                  "returnParameters": {
                    "id": 425,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18447:0:0"
                  },
                  "scope": 484,
                  "src": "18412:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 427,
                    "nodeType": "StructuredDocumentation",
                    "src": "18454:150:0",
                    "text": "@dev Cancels an initiated unstake by resetting the calling account's unstake cooldown. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "4ab17969",
                  "id": 430,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 428,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18631:2:0"
                  },
                  "returnParameters": {
                    "id": 429,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18642:0:0"
                  },
                  "scope": 484,
                  "src": "18609:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 431,
                    "nodeType": "StructuredDocumentation",
                    "src": "18649:357:0",
                    "text": "@dev   Handles a Staker's withdrawing of an amount of Stake Asset, minus any losses. \n@dev   It also claims interest and burns StakeLockerFDTs for the calling account. \n@dev   It emits an `Unstake` event. \n@dev   It emits a `BalanceUpdated` event. \n@param amt The amount of Stake Asset (BPTs) to withdraw."
                  },
                  "functionSelector": "2e17de78",
                  "id": 436,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 434,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 433,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 436,
                        "src": "19028:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 432,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19028:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19027:13:0"
                  },
                  "returnParameters": {
                    "id": 435,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19049:0:0"
                  },
                  "scope": 484,
                  "src": "19011:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 437,
                    "nodeType": "StructuredDocumentation",
                    "src": "19056:183:0",
                    "text": "@dev Withdraws all claimable interest earned from the StakeLocker for an account. \n@dev It emits a `BalanceUpdated` event if there are withdrawable funds. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 441,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 439,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19278:8:0"
                  },
                  "parameters": {
                    "id": 438,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19266:2:0"
                  },
                  "returnParameters": {
                    "id": 440,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19286:0:0"
                  },
                  "scope": 484,
                  "src": "19244:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 442,
                    "nodeType": "StructuredDocumentation",
                    "src": "19297:436:0",
                    "text": "@dev   Increases the custody allowance for a given Custodian corresponding to the account (`msg.sender`).\n@dev   It emits a `CustodyAllowanceChanged` event.\n@dev   It emits a `TotalCustodyAllowanceUpdated` event.\n@param custodian The address which will act as Custodian of a given amount for an account.\n@param amount    The number of additional FDTs to be custodied by the Custodian."
                  },
                  "functionSelector": "27f91856",
                  "id": 449,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 447,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 444,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 449,
                        "src": "19772:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 443,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19772:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 446,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 449,
                        "src": "19791:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 445,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19791:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19771:35:0"
                  },
                  "returnParameters": {
                    "id": 448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19815:0:0"
                  },
                  "scope": 484,
                  "src": "19738:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 450,
                    "nodeType": "StructuredDocumentation",
                    "src": "19822:692:0",
                    "text": "@dev   Transfers custodied StakeLockerFDTs back to the account. \n@dev   `from` and `to` should always be equal in this implementation. \n@dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n@dev   It emits a `CustodyTransfer` event. \n@dev   It emits a `CustodyAllowanceChanged` event. \n@dev   It emits a `TotalCustodyAllowanceUpdated` event. \n@param from   The address which holds the StakeLockerFDTs.\n@param to     The address which will be the new owner of the amount of StakeLockerFDTs.\n@param amount The mount of StakeLockerFDTs transferred."
                  },
                  "functionSelector": "2ac04ac8",
                  "id": 459,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 457,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 452,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 459,
                        "src": "20548:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20548:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 454,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 459,
                        "src": "20562:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 453,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20562:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 456,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 459,
                        "src": "20574:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 455,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20574:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20547:42:0"
                  },
                  "returnParameters": {
                    "id": 458,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20598:0:0"
                  },
                  "scope": 484,
                  "src": "20519:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 460,
                    "nodeType": "StructuredDocumentation",
                    "src": "20605:182:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Pool Delegate or a Pool Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 463,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 461,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20806:2:0"
                  },
                  "returnParameters": {
                    "id": 462,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20817:0:0"
                  },
                  "scope": 484,
                  "src": "20792:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 464,
                    "nodeType": "StructuredDocumentation",
                    "src": "20824:186:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Pool Delegate or a Pool Admin can call this function."
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 467,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 465,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21031:2:0"
                  },
                  "returnParameters": {
                    "id": 466,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21042:0:0"
                  },
                  "scope": 484,
                  "src": "21015:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 468,
                    "nodeType": "StructuredDocumentation",
                    "src": "21049:130:0",
                    "text": "@dev Returns if the unstake cooldown period has passed for `msg.sender` and if they are in the unstake window."
                  },
                  "functionSelector": "86bf1da3",
                  "id": 475,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isUnstakeAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 470,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 475,
                        "src": "21210:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 469,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21210:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21209:14:0"
                  },
                  "returnParameters": {
                    "id": 474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 473,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 475,
                        "src": "21247:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "21247:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21246:6:0"
                  },
                  "scope": 484,
                  "src": "21184:69:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 476,
                    "nodeType": "StructuredDocumentation",
                    "src": "21259:183:0",
                    "text": "@dev Returns if an account is allowed to receive a transfer. \n@dev This is only possible if they have zero cooldown or they are past their unstake window. "
                  },
                  "functionSelector": "fab11078",
                  "id": 483,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isReceiveAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 478,
                        "mutability": "mutable",
                        "name": "_unstakeCooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 483,
                        "src": "21473:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21473:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21472:26:0"
                  },
                  "returnParameters": {
                    "id": 482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 481,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 483,
                        "src": "21522:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 480,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "21522:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21521:6:0"
                  },
                  "scope": 484,
                  "src": "21447:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 485,
              "src": "10604:10927:0"
            }
          ],
          "src": "135:21397:0"
        },
        "id": 0
      }
    }
  }
}